Porting zope.tal to Python 3
Marius Gedminas <[email protected]>
| Newsgroups | gmane.comp.web.zope.devel |
|---|---|
| Message-ID | <20130211184438.GA28162@platonas> |
I don't plan to write about every package I port, but there were some
lessons learned from zope.tal that I thought I should mention.
- Running 2to3 on your sources is a good way to identify places that
need changing, but you'll have to revert most of the actual changes to
keep it compatible with Python 2.
I recently learned about a tool called python-modernize[1] that is
basically 2to3 except it rewrites into a common Python 2 & 3 subset.
I haven't checked it out yet, but it sounds promising
[1] http://pypi.python.org/pypi/modernize
- StringIO: while Python-3-style io.StringIO() and io.BytesIO() classes
exist in Python 2.6+, you can't easily use either them as a
replacement for StringIO.StringIO or cStringIO.StringIO. Why?
Because people tend to mix native (ASCII-only) string literals with
Unicode objects, and that's a no-no in Python 3 land.
I didn't like the idea of importing unicode_literals from the
__future__, or of dropping u'' prefixes everywhere. Partially because
I'm not sure that would be enough -- str objects might make it all the
way though the public API of zope.tal and suddenly code that used to
work on Python 2 just fine would now explode. So I went with a
conditional import -- from cStringIO import StringIO on Python 2 and
from io import StringIO on Python 3.
- tox/detox make it very easy to add just one more supported Python
version -- edit tox.ini, run detox, fix tests. This works with PyPy
too, not just Python 3.x!
Marius Gedminas
--
http://pov.lt/ -- Zope 3/BlueBream consulting and development
_______________________________________________
Zope-Dev maillist - [email protected]
https://mail.zope.org/mailman/listinfo/zope-dev
** No cross posts or HTML encoding! **
(Related lists -
https://mail.zope.org/mailman/listinfo/zope-announce
https://mail.zope.org/mailman/listinfo/zope )
signature.asc
(application/pgp-signature, 190 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iD8DBQFRGTwWkVdEXeem148RAlz8AKCJCftjOL3XuOw793C5tflFkwchsACePtEl YKbsuiizGxwWrUR/DzCAuIw= =111I -----END PGP SIGNATURE-----