After chickening out a couple of times over the past few years, about eight 
months ago we migrated our small code base from 2.7.14 to 3.6.5.  Some notes:

On 2.7 we spent a couple of years coding with 3.x in mind, using import from 
__future__ and coding to Python 3 standards wherever possible.  This greatly 
reduced the number of changes put into production during cutover and got us 
used to Python 3.

We used 2to3.py and found that it handled easy cases (print) well and provided 
a good check on my work when I hand-converted.

The string versus bytes issue was the most difficult.  We receive many files 
from other financial institutions, who receive some of the data from yet other 
FIs.  Most of them seem to have little understanding of, or interest in, 
encodings, and claim to send the files in 'ASCII'.  Python 3 is intolerant of 
dirty data, whereas previous Pythons let anything go.  I because very familiar 
with encoding= and errors= on open().  And network protocols want bytes.

I also suggest paying special attention to division (/).  We used the 
__future__ import to handle this early.

We had some problems installing Python 3.6.5 on Windows Server 2012 that 
already had 2.7, particularly Registry settings that wound up being wrong.  The 
problems seemed to occur erratically, so YMMV.  After some trial and error, we 
chose to leave Python 2.7 installed and install Python launcher for Windows 
(PyLauncher), to allow for easy fallback (which we never had to do) and because 
this provided the smoothest install.

We have found Python 3.6.5 to be very reliable on Windows Server 2012.

My next project is to upgrade to Windows Server 2016 and Python 3.7 on a new 
machine.  We will not be installing Python 2.7 on this machine.

HTH,
  Steve J. Martin


-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to