The short answer:
http://docs.djangoproject.com/en/dev/faq/install/#can-i-use-django-with-python-3
The longer answer:
We haven't published a formal plan -- mostly because in volunteer
projects, long term formal plans aren't worth the paper they aren't
printed on :-)
However, we are aware of the need to transition, and we do have an
informal plan to do so. In practical terms, it means dropping support
for Python 2.4 and 2.5 in successive releases of Django. Once we're at
a Django 2.6 minimum supported version, using 2to3 to maintain
parallel implementations becomes a lot easier.
The factor slowing progress is the rate at which we can deprecate
Python versions. This is largely driven by the Python versions that
are in the field and are commercially supported. At the moment, RedHat
Enterprise Linux is the laggard of the bunch; in order to support
RHEL, we need to support Python 2.4. Our own deprecation policy is
governed by the deprecation policies of the underlying operating
system platforms.
Effectively, this means that official support for Django under Python
3 is still a couple of years away.
Yours,
Russ Magee %-)
Fortunately, there is plenty to do preparing for this glorious day --
many commonly-used libraries which Django depends on directly, or
which are commonly used in Django apps (like feedparser,
BeautifulSoup, dateutils, etc.) need porting to python3. This is an
active need serving the larger Python community. Please consider
helping there.
http://docs.python.org/dev/library/__future__.html#module-__future__
Sure, everybody is raving about Python 3 but 2.6 being the smallest
supported version with Django would already be a huge leap towards 3 I
think.
As Russell said, looks like RHEL is going to be the indicator as to when
things will move forward.
If I look at http://distrowatch.com/table.php?distribution=redhat
however and assume that RHEL 5.5 is going to be supported for quite some
time then I think it might be a long time until Django arrives at 2.6
being the smallest supported Python version.
How long are we going to plan supporting RHEL 5.5 and thus Python 2.4
after RHEL is out?
My apologies -- in the haste of getting a response out, I was a little
lax in my choice of words. What you've described - i.e.,
* A single maintained 2.X source tree
* An auto-generated 3.X source tree,
* When 2.X support is dropped, the migration script is run one last
time to migrate the source tree to be 3.X
is pretty close to what I had in my head as the likely path. In
practice, I'm sure there will be some complications, but we won't
really know what they are until we get serious about 3.X support.
> For a short time on the pywin32 team we tried to "maintain parallel
> implementations" and found that it was a mistake we had to undo. The
> correct approach is to maintain a SINGLE implementation -- in Python 2
> format -- and use 2to3 as a tool when the code happens to be running
> on Python 3+. 2to3 should be run by distutils when it detects that
> setup.py is being run by Python3. It should NOT be run manually by a
> human.
>
> Then, some years in the future when the last Python 2.7 engine fades
> away, you will run 2to3 once for the last time, and THEN maintain in
> Python 3 format. You do NOT write your code with print() functions,
> etc.. Simply roll any needed refactoring into the trunk at the
> earliest opportunity, and make sure you don't break them during
> maintenance.
>
> That's my advice from my experience. The code I am supporting runs on
> any version of Python from 2.3 thru 3.1, including IronPython.
It's good to know that there are people in the community that have
done this in anger on other projects. If anyone can provide patches
for refactors that are necessary in order to simplify the 3.X
migration process, I'm happy to apply those patches -- and as I
indicated, I already have applied a couple of patches for exactly this
reason; for example changeset 13509 was to change the way we use
sorting functions to avoid a keyword argument that has been deprecated
for 3.X.
Yours,
Russ Magee %-)