Updated Packages – Python 3.3
wiki.ubuntu.com
wiki.ubuntu.com
Things were moving very slowly at the start, some features were backported to Python 2, others were reintroduced (in Python 3.2 and 3.3) and compatibility packages slowly appeared as people started experimenting with porting strategies and methods.
Since the second half of 2012, things have started picking up steam as bigger packages have started their migration effort (often as single-source, which is now considered the best strategy when possible) which is starting to solve the chicken-and-eggs problem for end-users (applications can't switch until all their dependencies are compatible)[0].
Python 2 will stick around though, there are 20 years of Python code which won't run as-is on Python 3, and may never do barring significant rewrite.
And of course Python 3 may yet be rejected by the community, although it definitely seems to be gaining — rather than losing — steam. The biggest problems in the long term will probably be in the Scientific Python communities.
[0] A few pretty big names are still Python 2 though, Werkzeug and Flask are big ones for webby stuff, the official-ish MySQL adapter is an other one for many, and a bunch are not considered "production-ready" state or side-packages are missing e.g. Django 1.5 is the start of Django's transition but many extensions such as South or the debug-toolbar are not p3-compatible.
https://pypi.python.org/pypi/Pillow/2.0.0
> NumPy
We're at almost three years now that people have been wrongly complaining about NumPy not being on Python 3. When do you think it will end?
http://www.mail-archive.com/numpy-discussion@scipy.org/msg26...
> PyPy
It's getting close.
http://morepypy.blogspot.com/2013/03/py3k-status-update-10.h...
Pillow works on py3 as others have already mentioned.
For current status see https://gist.github.com/untitaker/5321447 (Werkzeug is the most significant Flask dependency)
I guess that the incompatible changes in Python 3 don't really help. Ruby 1.9 introduced incompatibilities but they were fairly minor and easy to resolve. The biggest incompatibility was probably the introduction of string encodings. Python 3 introduced a stricter string encoding system and changed syntax in some ways. Some of the syntax changes make it very difficult to write code that is compatible with 2.6, 2.7 and 3.0.
In my experience, Python developers put much more emphasis on creating systems that are correct, secure, robust and reliable. Part of this involves thinking through any changes thoroughly, and being somewhat conservative in the adoption of new technologies and techniques.
The Ruby community, on the other hand, generally places much less emphasis on such factors. They're often much more willing to use newer software, even if it means the stability, correctness and security of the software systems they're building is decreased.
So it doesn't surprise me at all that Ruby developers would rush to a new version, while Python developers take a slower approach involving more thought and care.
Personally I still run 1.8.x several places too, not because I have any particular reason to, but because I haven't had any particular reason to upgrade - not a single gem I depend on for my hobby projects require 1.9.x.
(The plan for this was originally announced[2] in 2011.)
1. http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/4...
2. http://www.ruby-lang.org/en/news/2011/10/06/plans-for-1-8-7/
If Rails didn't support Ruby 1.9, I'd imagine the migration would have been slower.
It's actually fairly easy to write code that works with 2.6+ and 3.x, although you do still have to pay attention to it. Supporting 2.5 or below as well makes it rather harder.
Most of Python's features are carefully crafted to not cause compatibility issues. 3.x is the major exception in many, many years.
IIRC most of the big packages have finally moved over so it'll just become less of an issue over time.
Edit: I found one here https://python3wos.appspot.com/ and another one here http://py3ksupport.appspot.com/
Looking forward to NLTK 3.0.
Apart from NLTK (A port is underway) everything I use currently has been ported which was a surprise. Time to start thinking about making the move I think.
[1]: http://blog.briancurtin.com/posts/the-year-of-the-snake.html
When starting a project you may need some 3rd party stuff (library, framework, etc) that doesn't support Python 3 (yet; for different reasons, sometimes the project is unmaintained, sometimes is a _huge_ project and Python 3 support is not ready, but I have yet to find a project that "rejects" Python 3).
Because 2.x (2.6 to 2.7) is available, it's not a big deal and you just use Python 2. Thanks to 2.7 (that includes several features from Python 3), finally moving to Python 3 shouldn't be a pain for most people, once all your requirements support Python 3.
...makes me wonder if anyone had the opposite thought: A python programmer thinking of learning perl, but waiting until this newfangled perl 6 became the standard. I wonder who'll end up learning a new language first?
3.0 and its usage of pervasive unicode is an essential scripting language feature Python needed, and where Python2 was a syntactically pretty language with some big pitfalls and "wtfs?" Python3 corrects most of those and is all around better for it.
I do have to say, as someone who has looked at Perl, that is pretty much my stance - Perl 6 is a long time coming, I want it to hit before I try out Perl, same reason I waited until C++11 was market ready to jump into C++ (and now I'm writing qt apps all the time).
At least Python 3 exists, and is usable for production-grade systems. Its adoption may not have been as quick as anticipated, but at least it does exist, and it is usable.
It's just a slow movement, because there's a lot of legacy code out there. Also, many features up to 3.2 were backported to 2.7, so there was little incentive to make the switch. That's starting to change with 3.3.
The implementations become more complex, which in turn can result in bugs, development delays, and so forth.
Additionally, it allows users of said technologies to continue to use techniques and functionality that have been observed to be outdated, bad or even harmful. You mention Java, which is a good example of how cruft can linger for many, many years, and continue to be used in that time.
Sure, all those three new things are better, but each of them add up to porting a complex app.
Python 3 isn't just a little bit incompatible in a few places, it has widespread incompatibilities and is therefore effectively a different language.
C# takes it much further, and iterates on syntax a lot more, but Python3's breakage from Python2's is comparable I feel, just not in nearly as extreme a case.
They're not. You can create "single source" Python packages working on both Python 2 and Python 3. Good luck doing that with C# and VB.
However, any push that allows us to use 3.3 is a great thing. I've been reading the 3.3 docs and being like, neat feature! Then switching back to the 2.7 docs and realising I can't use it :(
As far as I'm concerned, I would have preferred Python to be Python2.x, and a new code name for Python3, i.e. Cobra.
As for user-created scripts...
If you want have your cake and eat it too, tough.
Everyone else, will upgrade and rejoice that Ubuntu isn't 10 years behind like another CrimsonCap distro.
Sure the process isn't 100% complete, but it is hardly 10 years behind.
http://koji.fedoraproject.org/koji/packageinfo?packageID=978...
http://koji.fedoraproject.org/koji/packageinfo?packageID=125
This was around Ubuntu 12.10, references Ubuntu wiki with nearly the same text back then.
Python 2 is not being developed actively, aside from security updates, so it is permanently frozen at 2.7, with the intent of removing support entirely eventually (though not for a while).
It's not really a like comparison to compare the two.
It wasn't always that way, however much certain luminaries try to retcon. Perl6 was originally intended to be, well, the next version of perl; it was only after the community's rejection that the decision to continue perl5 happened. It's not beyond the realms of possibility that the same thing could happen to python (though I certainly hope not, and stories like this suggest we're reaching the tipping point).
The lack of any usable Perl 6 implementation by the time of Perl 5.12 did more to promote the continuation of Perl 5 as its own project than any specific rejection of Perl 6. When the plan was for Perl 6 to replace Perl 5, the idea that Perl 5.12 would migrate to Parrot as a VM so that Perl 5 and Perl 6 code could run in the same process.
I'm not sure I'm willing to trust Ubuntu to decide this for me ... they also thought Unity was in my best interest, and foisted the Amazon store upon my desktop. Good luck Ubuntu ... I'm outta here.
Sounds like a strawman arguement to me. People in the community are aware of the different versions of Python and know how to deal with it. This "issue" hasn't affected Google, NASA or the millions of developers/users that utilize Python to the extent that they are in crisis mode. You can run multiple versions of Python on the same system, there are utilities that make this manageable.
What other language is "your" boss going to pick that you can't find issues with? Does he actually understand the technical details and history of said language? You can find all sorts of issues with any programming language, all of them are "Hopper complete."
Then to your second paragraph—I actively enjoy using Unity. And as for the Amazon things, I see the direction they're headed in and approve of it, though the Amazon part alone is of no use to me. Canonical is making good things; sure, in the meantime there have been some things which haven't worked quite so well (e.g. I didn't find Unity usable for the first two releases) but their direction is solid, in my opinion.
Teams using Python to develop, in the present state, mostly base their decisions to chose py2 or py3 based on the maturity of the libraries (py3 ones) they are gonna use. Ubuntu devs are using good judgment here, they are first moving code they use for the OS from 2 to 3 and switch the default python package version. But py2 should be available to any package which specifies it as a dependency. This should be nearly invisible to a normal user. This also gives the much needed push for Py3 adoption.
By the way, assuming either language satisfies the external requirements for the project, any half-way competent boss would say "Figure it out. Bring me your decision by the end of the day(/week/whatever). KTHXBYE."
They're so closely related you can write code compatible with both (and that's the path many — if not most — libraries are taking)
for new projects where i control deployment i use python 3 (these days, the support is there - in fact in at least one case i am using a python 3 only lib). for maintenance or projects where the client has existing systems, i use whatever is most appropriate.
i am a professional. i get the job done. what more is there to say? oh, yeah, running round throwing a hissy fit for internet points.
It is the bane of backwards compatibility breakage in language semantics. I sometimes think maybe Python3 should have been another language, but it is understandable when there is so little syntactic breakage between the two you want to try to tie them together than diverge on the unicode issue.
I started to specify my python preference in my #! (ie #!/usr/bin/python3) in my own programs. If everyone did this the move would be much easier.
[1] https://en.wikipedia.org/wiki/Shebang_%28Unix%29#Portability
I still specify it every time anyway, but thought it'd be worth mentioning. :)
The --python switch is really great, though, particularly now that 3 is getting distro traction and most of us who work in Python are likely maintaining a lot of 2.x projects. Thanks!
> Arch Linux targets and accommodates competent GNU/Linux users by giving them complete control and responsibility over the system.
The PEP itself should maybe point that out and not say that `python`SHOULD refer to python2 and at the same time MAY refer to python3. It only helps to the confussion.