NoMorePython2

From Yocto Project
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

No More Python 2!

Problem Statement

Python 2 is in maintenance mode and everyone should shift to Python 3. We've made the move in OpenEmbedded Core so that core-image-sato doesn't pull in Python 2, but Python 2 is still needed during the build.

There are two ways in which Python 2 is needed:

  1. Use of /usr/bin/python on the host
  2. Explicit dependency on python-native

Goal

To be able to build first core-image-sato and then world of OpenEmbedded Core without Python 2 being present on the host, or being built via python-native.

Method

To find implicit dependencies on the build host having Python 2, one option is to just remove Python 2 from your build host. Whilst this works, unless you're building inside a container this might not be feasible. The next best thing is to make the binary not executable briefly for the test builds. Sadly you can't remove Python 2 from HOSTTOOLS as several upstreams will explicitly poke around /usr/bin looking for a Python to run.

To find recipes that depend on python-native then simply build an image/world/whatever with -g and search the resulting task-depends.dot. For example, building core-image-sato for intel-corei7-64 results in:

"core-image-sato.do_build" -> "bmap-tools-native.do_build"
"bmap-tools-native.do_prepare_recipe_sysroot" -> "python-native.do_populate_sysroot"

So, an image depends on bmap-tools-native which depends on Python 2.

Patches, from ready to submit to utter hacks, are being collected in poky-contrib:ross/nopy2.

Status

Done

  • bmaptool
  • texinfo-dummy-native

Patches Ready

  • ca-certificates (in ross/nopy2)
  • libsoup
  • grub
  • pseudo
  • ninja

To Review

  • xcb-proto (do all callers use py3)

Broken

  • python3-pycairo (new upstream uses distutils)
  • webkitgtk
  • ovmf
  • eglinfo-x11 eglinfo-fb (waf update?)
    • Waf uses Python 2 by default
    • Add waf-native to oe-core
    • Extend waf class to invoke waf-native using Python 3
    • Use waf class in recipe
  • SCons (scons 3 is working towards py3)

Needs Python 2, actively refuses to use Python 3