Firefox/Python 3 Migration: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
(porting instruction updates)
(→‎Resources: wording)
Line 43: Line 43:
* [https://black.readthedocs.io/en/stable/index.html Black] can format Python 2 code and Python 3 code (but [https://black.readthedocs.io/en/stable/installation_and_usage.html it requires Py3.6+ to run]).
* [https://black.readthedocs.io/en/stable/index.html Black] can format Python 2 code and Python 3 code (but [https://black.readthedocs.io/en/stable/installation_and_usage.html it requires Py3.6+ to run]).


=== Resources ===
=== Porting Resources ===


[https://docs.python.org/3/howto/pyporting.html Porting Guide on python.org]
[https://docs.python.org/3/howto/pyporting.html Porting Guide on python.org]


[http://python-future.org/compatible_idioms.html Cheat Sheet: Writing Python 2-3 compatible code].  Note: misses some advanced changes, like porting __eq__() to __hash__() and changes to the slice interface.  
[http://python-future.org/compatible_idioms.html Cheat Sheet: Writing Python 2-3 compatible code].  Note: misses some advanced changes, like porting __eq__() to __hash__() and changes to the slice interface.


== References ==
== References ==

Revision as of 20:24, 30 May 2019

Why This is Important

In mozilla-central there are over 3500 Python files (excluding third party files), comprising roughly 230k lines of code. Most of it is Python 2.[1]

Python 2 will reach it's End Of Life on January 1st 2020. This page collects links and resources to assist the migration of the Firefox ecosystem off of Python 2 and onto Python 3.

How We Get There

As of today (May 2019) we require both the Python 2 and Python 3 interpreters to be installed to build and develop Firefox.

Next we:

  1. Make Python 3 porting and development safe by adding a Python 3 option to the developer toolchain. (mach lint, parts of the test suite)
  2. Make key support libraries run in both Python 2 and Python 3. (mach-core)
  3. Build interpreter switching mechanisms into the toolchain so we can run sub-components in just 2 or just 3. (mach sub-commands, py_action)
  4. Port Python 2-only components to Python 3 piecemeal.
  5. Remove Python 2 compatibility. (When that might happen needs discussion. Possibly sometime in 2020.)

Getting Involved

Find the others

Most discussion happens in the #python channel on Slack (NDA'd Mozillians only).

Find a place to start hacking

Bug 1496527 tracks the migration work across Firefox.

How to Port the Code

Before starting

If you haven't ported modules before (or need a refresher), read the Porting Guide on python.org. It has a good outline of the porting process.

Porting modules in the Firefox source tree

  • We've already standardized on Python 2.7 across the tree.
  • Make sure you can test the code you're working on with python3!
    • If using `tox`, then adding `py35`, and `py36` to the list of environments should be sufficient.
    • If using |mach python-test|, make sure the relevant manifest doesn't skip-if Python 3 and run |mach python-test --python 3 <path>|.
  • `futurize` Stage 1 fixes can be used to transform code into code that's compatible with both python2.7 and python3.
  • The `six` module is available in-tree, feel free to use it as a dependency.
  • Black can format Python 2 code and Python 3 code (but it requires Py3.6+ to run).

Porting Resources

Porting Guide on python.org

Cheat Sheet: Writing Python 2-3 compatible code. Note: misses some advanced changes, like porting __eq__() to __hash__() and changes to the slice interface.

References

Bug 1496527 tracks the migration

https://ahal.ca/blog/2019/python-3-at-mozilla

Python 3 tree migration notes

mach Python 3 migration roadmap