I fully agree with this sentiment. If you read the discussions, it sounds like Python 3 is an entirely different language which is definitely not the case. Porting code to Python 3 is really easy and involves no changes to the program flow or the APIs you use. Hardest to port is usually the Bytes/Unicode transition. In my projects, it fixed a few nasty Unicode bugs which was a nice bonus.<p>> Python 3 came out 2008, at the moment of writing this, it’s almost a decade and if your third party package has not been updated, then it’s really messed up.<p>Exactly. A library which has no Python 3 port in 2016 is going to be an maintenance burden either way, since it's not going to get support or security updates either. Many of those abandoned projects have been forked for Python 3 support, and active development continues there.<p>A number of new projects are Python 3-only.<p>Two years ago, I recommended new developers to stick with Python 2 for anything except toy projects (and use __future__ imports to make it easier to port later) because library support just wasn't there. Now it is, so it's an easy decision.<p>Porting to Python 3 means future-proofing the project - not only Python 2 will be EOL, but many libraries will drop Python 2 support.<p><a href="http://www.python3statement.org/" rel="nofollow">http://www.python3statement.org/</a>
So, the problem is that the Python developers - in my opinion unneccessarily - broke backwards compatibility. There are two main problems - the print function, and str/unicode. They could just add two or three things, and I'd be completely satisfied. I hope they are self-descriptive:<p><pre><code> from __past__ import print_statement
import unicode_string as str, bytestring as bytes
import unicode_string as unicode, bytestring as str
from python2 import legacy_module
</code></pre>
... or equivalent comment options (a la "coding: utf8"), or iterpreter flags, or something like that. Perl 6 manages to load Perl 5, I don't see why this shouldn't be possible in Python.<p>Now you might say this is petty, why get worked up by something as minor as the print statement. But just because it is so minor, it feels so unneccessary and petty to remove it.<p>The str/unicode switch was also not handled optimally. There is a lot of code still broken. I just ported some code to Python 3 which uses Twisted, and found the FTP implementation does not work in Python3. It turns out this is really hard to fix, because FTP is not encoding aware, and bytestrings "I dont care right now what encoding this is"-strings are second class citizens in Python3.<p>It's a bit unfortunate that the Python developers get to decide what is defined as Python and what not. When something gets big, I believe you get certain responsibilites. You shouldn't just "break the world" and strand lots of developers in 2008. That they even published a PEP stating there will be no Python 2.8 is silly and mean.<p>To end on a hopeful note: Why won't someone make a Kickstarter... if you manage to get full support for loading Python 2 modules into the current, main CPython 3 codebase (upstream), I'd be willing to pay, say, 100€. I'm sure some companies with legacy codebases would like to chip in.
Spoken like someone who's never maintained a M+ line monolithic codebase.<p>Of course you <i>should</i> upgrade, but an armchair admonishment that papers over the actual costs is just a lot of hot air.
> If you’re on the older version (“Python 2” as you say), you’re a decade behind, you should have upgraded at 2008.<p>Ok, I've stopped reading there.
> If you’re on the older version (“Python 2” as you say), you’re a decade behind, you should have upgraded at 2008.<p>NumPy didn't support Python 3 until release 1.5.0, which came out 2010-08-01.<p>SciPy didn't support Python 3 until 0.9.0, which came out 2010-12-12.<p>PyCrypto got Python 3 support in late 2011.<p>Those three alone made switching to Python 3 in 2008 completely unfeasible for a heck of a lot of people.
It starts out saying that it's all the same language, then it veers wildly off course to talk about how different they are in saying that Python 3 is way better. Facts are only concrete if and when they are useful.<p>Wonderful.