Beginner needs advice

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat May 28 04:13:52 EDT 2011


On Sat, 28 May 2011 08:38:54 +0200, Thorsten Kampe wrote:

> * Thomas Rachel (Sat, 28 May 2011 07:06:53 +0200)
>> Am 27.05.2011 17:52 schrieb Steven D'Aprano:
>> > On Fri, 27 May 2011 09:40:53 -0500, harrismh777 wrote:
>> >> 3.x is completely incompatible with 2.x (some call it a dialect, but
>> >> that is a lie).
>> >
>> > "Completely incompatible"? A "lie"?
>> 
>> Hard word, but it is true. Many things can and will fall on your feet
>> when moving.
> 
> I think we should stop talking about (in)compatability because everyone
> seems to associate something different with that term (incompatible =
> "no Python2 to code will run with Python3", "not all Python2 code will
> run with Python3").

There is a difference between "completely incompatible" and merely 
"incompatible to some degree". It just takes *one* tiny incompatibility 
to stop a program running, so "will it run unmodified?" is hardly a good 
measure of the degree of incompatibility.

Python 2.5 and 2.6 are incompatible to some degree. I recently had to 
port a client's program from 2.3 to 2.6. I did it in two steps: about two 
hours to get it working in 2.5, then the same to get it working in 2.6, 
and then about a day of effort to iron out all the display issues in 
Tkinter (such as text being shown in giant letters).

Judging by the binary Yes/No "does it run unmodified?" test, I'd have to 
say that Python 2.3, 2.5 and 2.6 are "completely different" -- which 
would be foolish. Nobody sensible applies such a simple-minded, overly 
strict test to minor releases, or even between major releases like 1.5 
versus 2.0. What would be the point? It is not the least bit helpful to 
learn that your 2.3 code doesn't run unmodified in 2.6. (Learning that it 
does, on the other hand, is useful. But such code is in a minority.)

And yet some people are willing to throw commonsense away and apply such 
an obviously unsuitable test to Python 3. These people vehemently insist 
that the differences between Python 2.7 and 3.2 are of the same 
qualitative kind as between Ruby and PHP (they're *different languages* 
you see, not merely different dialects of the same language, and anyone 
who tells you different is not just mistaken but *lying*).



> The question is: if you want (or have) to run your code under Python3,
> how likely is that it will run unmodified? 

That's not a useful question. The useful question is to ask how much 
effort is it to make the code run in the new version. The effort might be 
zero (but probably isn't), or it might be a minute, or an hour, or a day, 
or six months... that depends partly on the complexity of your code and 
partly on the differences between Python 2.x and 3.x.

A trivial app might take three minutes to port from Python 2.5 to 3.2. A 
complicated app might take three months to port from 2.5 to 2.6. What 
generalization do we make from this?


> My experience is: unless the
> code is especially written with Python3 compatability or just a short
> snippet, it's actually quite unlikely that it will run.

You describe taking a full day to upgrade a 150 line PyQt application. 
Only it wasn't a 150 line application, was it? By your own admission, 
much of the problems were in the library, PyQt, so it was more like 
150,000 lines. (Or whatever the size of PyQt is...)

Rather than "it took a full day to upgrade 150 lines to use Python 3, 
that's terrible!", it is more like "it only took a day to upgrade my 150 
line app *and* work around a whole lot of problems with a huge library, 
that's really great!"



-- 
Steven



More information about the Python-list mailing list