You know, when I am working on an existing project for a client that's allotted 15 hours a week to it, and I have to get actual features pushed out, I don't have time to check which of the 25+ dependencies I list are going to work in Python 3. Sure, maybe I can start a new project in Python 3, but there are enough existing projects to not be able to do this.
Also, even if I am starting an existing project, what if down the line I must use a library that's only available for Python 2? I am not going to rewrite something like that because it will cost my client money if I spend time on it.
The problem with Python 2 is that it's good enough. Python 3 is a huge improvement, yet until I can be reasonably sure that all libraries I am likely to use are available for both, Python 2 is the winner.
Having said that, any personal projects I have started recently have all used Python 3 and it's been great. I also try to make sure that any libraries I write work in both.
You are right that Python 2 is good enough, but I'd add a majestically large "yet", because that will change from one day to the other.
My primary machine runs Arch Linux, a distro that switched the /usr/bin/python link to python3 some months ago, thus generating a sort of "majority Python 3" environment. I myself, having been rather apathetic on the switchover before, have switched completely to Python 3 just because using Python 2.x has become a hassle.
Admittedly, I am in the fortunate position that all my active python projects could be moved over easily, once boost-python and matplotlib were solidly 3-ready. Other libaries are more problematic (looking at you, every Django-plugin out there).
My point is, Python 2 won't be good enough for long and for some of us it already isn't any more.
Citation needed. Even the devs aren't trying to sell it as much more than a clean up. Very little is actually qualitatively better, and there are some regressions also - for one, last time I looked it was still about 10% slower than Python 2 in most benchmarks.
I'm disturbed at how "citation needed" has become an argument. Since you are also making a claim (that it is not an improvement) don't you have an equal burden to provide citations? Are citations really what will make this argument?
It is also somewhat questionable to ask someone to prove a negative.
This isn't true at all. The negative is also often seen in the form of a null hypothesis. "There's someone in the fridge". "No, there isn't". Here is a case where we can prove a negative. Some negatives by their nature can't be proven, but as a blanket statement it's false.
You yourself mentioned that benchmarks were worse - this is proof of the negative, and you could have cited those benchmarks in your argument.
I think originally Python 3 was a big improvement. But with the back-porting its features to 2.x, the incremental benefit of upgrading has been steadily reduced.
Yes, I understand. I've worked in corporate America for a couple of decades. Anyway, I got downvoted for my comment so I'll leave it up to the community to figure out how to deprecate 2.x.
Hey, I get what you are saying. It's up to the developers to move to Python 3. I am just trying to say that there's a difference between a "make sure every bit of library code you write works in Python 3 first, then backport to Python 2 if necessary" and "every project must convert to Python 3 now". I am all for the former. If you write a library, write it in 3, then see if the unit tests pass in 2.
Comments
You know, when I am working on an existing project for a client that's allotted 15 hours a week to it, and I have to get actual features pushed out, I don't have time to check which of the 25+ dependencies I list are going to work in Python 3. Sure, maybe I can start a new project in Python 3, but there are enough existing projects to not be able to do this.
Also, even if I am starting an existing project, what if down the line I must use a library that's only available for Python 2? I am not going to rewrite something like that because it will cost my client money if I spend time on it.
The problem with Python 2 is that it's good enough. Python 3 is a huge improvement, yet until I can be reasonably sure that all libraries I am likely to use are available for both, Python 2 is the winner.
Having said that, any personal projects I have started recently have all used Python 3 and it's been great. I also try to make sure that any libraries I write work in both.
You are right that Python 2 is good enough, but I'd add a majestically large "yet", because that will change from one day to the other.
My primary machine runs Arch Linux, a distro that switched the /usr/bin/python link to python3 some months ago, thus generating a sort of "majority Python 3" environment. I myself, having been rather apathetic on the switchover before, have switched completely to Python 3 just because using Python 2.x has become a hassle.
Admittedly, I am in the fortunate position that all my active python projects could be moved over easily, once boost-python and matplotlib were solidly 3-ready. Other libaries are more problematic (looking at you, every Django-plugin out there).
My point is, Python 2 won't be good enough for long and for some of us it already isn't any more.
Arch Linux has been python3 by default for several years now. I remember it was a very controversial decision at the time.
Citation needed. Even the devs aren't trying to sell it as much more than a clean up. Very little is actually qualitatively better, and there are some regressions also - for one, last time I looked it was still about 10% slower than Python 2 in most benchmarks.
I'm disturbed at how "citation needed" has become an argument. Since you are also making a claim (that it is not an improvement) don't you have an equal burden to provide citations? Are citations really what will make this argument?
The primary burden is the one stating the original argument. It is also somewhat questionable to ask someone to prove a negative.
considering that 3 is 50% more than 2, I'd say the negative is that it ISN'T a "huge" improvement.
(only a little kidding).
It is also somewhat questionable to ask someone to prove a negative.
This isn't true at all. The negative is also often seen in the form of a null hypothesis. "There's someone in the fridge". "No, there isn't". Here is a case where we can prove a negative. Some negatives by their nature can't be proven, but as a blanket statement it's false.
You yourself mentioned that benchmarks were worse - this is proof of the negative, and you could have cited those benchmarks in your argument.
I think originally Python 3 was a big improvement. But with the back-porting its features to 2.x, the incremental benefit of upgrading has been steadily reduced.
Nothing's been back-ported to Python 2 in nearly 4 years now. 2.7 came out in July 2010.
It's not a huge improvement to me, that's why I don't use it.
Yes, I understand. I've worked in corporate America for a couple of decades. Anyway, I got downvoted for my comment so I'll leave it up to the community to figure out how to deprecate 2.x.
Hey, I get what you are saying. It's up to the developers to move to Python 3. I am just trying to say that there's a difference between a "make sure every bit of library code you write works in Python 3 first, then backport to Python 2 if necessary" and "every project must convert to Python 3 now". I am all for the former. If you write a library, write it in 3, then see if the unit tests pass in 2.
It's an improvement, but it's not huge. It's a better language, but it's still the Python we all know and love without a couple warts.