3

Differences between revisions 9 and 40 (spanning 31 versions)
Revision 9 as of 2012-04-20 19:46:52
Size: 4485
Editor: mail
Comment:
Revision 40 as of 2013-11-04 15:39:33
Size: 1461
Editor: mail
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
It is a release goal for Ubuntu 12.10 to have only Python 3 on the installation CD images. We have a [[https://blueprints.launchpad.net/ubuntu/+spec/foundations-q-python-versions|Q-series]] blueprint for discussion of this goal at [[http://uds.ubuntu.com/|UDS-Q]] in Oakland, California, in May of 2012. There is a [[https://wiki.ubuntu.com/Python/FoundationsQPythonVersions|more detailed spec]] for this effort and a publicly shared [[http://tinyurl.com/7dsyywo|Google docs spreadsheet]] to track this effort. This is an ambitious effort that will only succeed with help from the greater Ubuntu, Debian, and Python communities. In other words, we need '''you'''! <<TableOfContents()>>
Line 5: Line 5:
At the bottom of this page, you will find various resources for diving more into aspects of supporting Python 3, from the pure-Python, C extension module, Debian packaging, and other perspectives. The intent of ''this'' page is to provide specific guidelines in a quick reference format, so that you only need to go here once you're familiar with the basic concepts and approaches, but need a refresher on specific coding techniques. This is a wiki page, and you are encouraged to contribute, but try to keep your recommendations tightly focused on accomplishing the release goal of Python 3 only on the 12.10 CDs. It is a release goal for Ubuntu 14.04 LTS to have only Python 3 on the desktop CD images. Also, we won't be allowing Python 2 on the Ubuntu touch images.
Line 7: Line 7:
== Before you start == We've had blueprints for several Ubuntu releases, the latest of which is a [[https://blueprints.launchpad.net/ubuntu/+spec/core-1311-python3-roadmap|Trusty]] blueprint. There is a [[https://wiki.ubuntu.com/Python/FoundationsTPythonVersions|more detailed spec]] for this effort, an [[http://people.canonical.com/~ubuntu-archive/transitions/onlypy3oncd.html|official transition tracker]] and a publicly shared [[http://tinyurl.com/kgx7hsc|Google docs spreadsheet]] to track this effort. This is an ambitious effort that will only succeed with help from the greater Ubuntu, Debian, and Python communities. In other words, we need '''you'''!
Line 9: Line 9:
Here are recommendations for you to follow before you start porting. We'll track Ubuntu (and some Debian) related tasks here. This page used to contain a lot of good quick references for porting to Python 3, but that information has now moved [[http://wiki.python.org/moin/PortingToPy3k/BilingualQuickRef|to wiki.python.org]].
Line 11: Line 11:
 * Target Python 3.2, 2.7, and optionally 2.6. Ignore anything older than that.
 * Use a single code base for both Python 2 and 3.
 * Do not rely on [[http://docs.python.org/py3k/library/2to3.html|2to3]] or the third party [[http://pypi.python.org/pypi/six|six]] module.
 * Modernize your Python 2 code first, getting it working in Python 2.7 before starting to port.
 * Clarify your data model: what are bytes (data) and what are strings (text)?
Line 17: Line 12:
I cannot overemphasize the last point. Without a clear separation in your mind and data model between bytes and strings, your port will likely be much more painful than it needs to be. This is the biggest distinction between Python 2 and Python 3. Where Python 2 let you be sloppy, with its 8-bit strings that served as both data and ASCII strings, with automatic (but error prone) conversions between 8-bit strings and unicodes, in Python 3 there are only bytes and strings (i.e. unicodes), with no automatic conversion between the two. This is A Good Thing. == Q/A ==
Line 19: Line 14:
== Python source ==

=== Python 3 file compatibility ===

Put the following at the top of all your Python files:

{{{
from __future__ import absolute_import, print_function, unicode_literals
}}}

This turns on three important compatibility flags.
 * Absolute imports are the default in Python 3 [[http://python3porting.com/differences.html#imports|[ref]]]
 * {{{print()}}} is a function in Python 3 [[http://python3porting.com/noconv.html#print-section|[ref]]]
 * Unadorned string literals are unicode type in Python 3 [[http://python3porting.com/problems.html#binary-section|[ref]]]

== Python extension modules ==

== Resources ==

 * [[http://wiki.debian.org/Python/LibraryStyleGuide|Debian Python packaging style guide (covers Python 2 and Python 3)]]
 * [[http://getpython3.com/|Python community portal to Python 3]]
 * '''Excellent''' [[http://python3porting.com/|in-depth Python 3 porting guide]]
 * [[http://python3wos.appspot.com/|Python 3 "Wall of Shame"]]
 * [[http://pypi.python.org/pypi?:action=browse&c=533&show=all|Cheeseshop packages explicitly claiming Python 3 support]]
 * [[http://wiki.python.org/moin/PortingPythonToPy3k|Python wiki porting guide (pure-Python)]]
 * [[http://wiki.python.org/moin/PortingExtensionModulesToPy3k|Python wiki porting guide (extension modules)]]
 * Barry Warsaw's blog
   * [[http://www.wefearchange.org/2012/01/debian-package-for-python-2-and-3.html|Debian packaging for Python 2 and 3]]
   * [[http://www.wefearchange.org/2011/12/lessons-in-porting-to-python-3.html|Python 3 porting (part 1)]]
   * [[http://www.wefearchange.org/2012/01/python-3-porting-fun-redux.html|Python 3 porting (part 2)]]
   * Python 3 plans for Ubuntu 12.10 (coming soon)
   * [[http://www.wefearchange.org/2011/11/update-on-ubuntus-python-plans.html|Python 3 plans for Ubuntu 12.04 Precise Pangolin]]
 * Ned Bachelder's Pycon 2012 talk [[http://pyvideo.org/video/948/pragmatic-unicode-or-how-do-i-stop-the-pain|Pragmatic Unicode, or How Do I Stop the Pain?]] '''''Watch this NOW'''''
 * Why not rely on 2to3? 2to3 is a pretty slow tool so it can impede on the speed with which you develop your code. It can however be used in non-overwrite mode to get a good sense of what needs to be changed in your source code. Generally, a single-source approach is the best for bilingual (i.e. Py2 and Py3) Python apps.

Python 3 on Ubuntu

It is a release goal for Ubuntu 14.04 LTS to have only Python 3 on the desktop CD images. Also, we won't be allowing Python 2 on the Ubuntu touch images.

We've had blueprints for several Ubuntu releases, the latest of which is a Trusty blueprint. There is a more detailed spec for this effort, an official transition tracker and a publicly shared Google docs spreadsheet to track this effort. This is an ambitious effort that will only succeed with help from the greater Ubuntu, Debian, and Python communities. In other words, we need you!

We'll track Ubuntu (and some Debian) related tasks here. This page used to contain a lot of good quick references for porting to Python 3, but that information has now moved to wiki.python.org.

Q/A

  • Why not rely on 2to3? 2to3 is a pretty slow tool so it can impede on the speed with which you develop your code. It can however be used in non-overwrite mode to get a good sense of what needs to be changed in your source code. Generally, a single-source approach is the best for bilingual (i.e. Py2 and Py3) Python apps.

Python/3 (last edited 2016-02-26 01:40:43 by localhost)