[openstack-dev] [swift] Plan to port Swift to Python 3

Victor Stinner vstinner at redhat.com
Fri Oct 9 11:38:29 UTC 2015


Hi,

Le 09/10/2015 12:12, vishal yadav a écrit :
> However I was just checking if you considered using 2to3. I can
> understand that translation using this tool might not cover every area
> in the code more specifically custom/3rd party libraries (non-standard
> python libraries) but IMO it can do fixer translations to much extent.

I tried 2to3, modernize and 2to6 tools in the past, but they produce a 
single giant patch with unwanted changes. These tools are written to add 
compatibility for all Python versions including Python 2.6 and Python 
3.0. In OpenStack, we only care of Python 2.7 and 3.4, so the code can 
be simpler. For example, we can simply write u"unicode" instead of 
six.b("unicode").

I wrote the sixer tool for OpenStack. Basically, it's the same than 
2to6, except that:

- sixer respects OpenStack Coding Style on imports: it groups and sorts 
imports. It avoids to have to manually fix individual modified import 
which takes a lot of time

- sixer can produce a patch for a single pattern. For example, replace 
all unicode with six.text_type but nothing else. Since all changes are 
reviewed carefully in OpenStack, it's important to produce "reviewable" 
(small) changes.

See also my blog article which explains the full rationale:
http://haypo.github.io/python3-sixer.html

My patch serie of 6 changes to fix most Python 3 issues was almost fully 
generated by sixer. Sometimes, I had to manually fix a few lines because 
no tool is perfect ;-) The patch serie:

* "py3: Replace unicode with six.text_type"
   https://review.openstack.org/#/c/232476/

* "py3: Replace urllib imports with six.moves.urllib"
   https://review.openstack.org/#/c/232536/

* "py3: Use six.reraise() to reraise an exception"
   https://review.openstack.org/#/c/232537/

* "py3: Replace gen.next() with next(gen)"
   https://review.openstack.org/#/c/232538/

* "Replace itertools.ifilter with six.moves.filter"
   https://review.openstack.org/#/c/232539/

* "py3: Replace basestring with six.string_types"
   https://review.openstack.org/#/c/232540/

Then I will then use sixer on individual files to fix all Python 3 at once.

Victor



More information about the OpenStack-dev mailing list