All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tim Orling <ticotimo@gmail.com>
To: openembedded-core@lists.openembedded.org
Subject: [PATCH v2 00/32] Python PEP-517: build wheels and install with pip
Date: Mon, 21 Feb 2022 13:23:15 -0800	[thread overview]
Message-ID: <cover.1645478020.git.tim.orling@konsulko.com> (raw)

Upstream Python is moving to pyproject.toml rather than setup.py and
wheels rather than eggs. The main place this is documented is in
PEP-517[1]. Installing packages with setup.py install is deprecated.

We have a choice with the 'kirkstone' LTS release of introducing this
series (and fixing any fall out during the stabilization period) or
living with deprecated Python packaging for the duration of the LTS (at
a minimum 2 years). This seems to be a compelling enough reason to bring
in this series, even if it results in a slight slip of the 'feature
freeze', which is officially tomorrow, Monday 21 Feb, 2022.

This series bootstraps python3-setuptools-native,
python3-flit-core-native, python3-wheel-native and python3-pip-native,
simply unzipping the wheel into PYTHON_SITEPACKAGES_DIR. This allows all
other recipes to be installed with pip, as intended by upstream.

Three new classes are introduced:
(1) flit_core which builds PEP-517 compliant packages which use
    flit_core.buildapi as their build-backend.
(2) setuptools_build_meta which builds PEP-517 compliant packages which use
    setuptools_build_meta  as their build-backend.
(3) pip_install_wheel, which simply installs wheels built by other
    classes.

The original setuptools3.bbclass do_compile is modified to
'setup.py bdist_wheel' (from python3-wheel-native) rather than the deprecated
'setup.py build' mechanism. 

The original setuptools3.bbclass do_install is modified to
use the pip_install_wheel.bbclass to install wheels with pip rather than
the deprecated 'setup.py install' mechanism. 

For pip install, we disable dependency checking (--no-deps) because it
proves to be brittle in our environment without providing full wheel
cache that seems like overhead that we do not need. We also disable
fetching wheels from pypi (--no-index). This is no different than our
normal workflow of requiring dependencies to be defined in a recipe.

Missing from this series is documentation of the new features, classes
and variables (this will be done under separate cover).

Also desired and previously discussed in YP meetings is a helper
function to warn that a recipe which currently inherits setuptools3
but has a pyproject.toml and defines a build-system.build-backend should
instead use of the new PEP-517 classes. This function is still in progress.

During testing, recipes which use python3-setuptools-scm are failing to
determine the version of the python package, For several recipes, the fix
was to use pyproject.toml and PEP-517 build backends. To be sure, other recipes
are still going to fail for the short term, until the root cause can be
determined. This was not seen again in v2 builds.

Another PEP-517 build-backend, poetry.core.masonry.api has been
identified in recipes in meta-python, but not in oe-core. The
python3-poetry-core recipe is WIP, but brings in a number of
dependencies that are perhaps not worth it to bring into oe-core at this
time. Rather we can support these recipes in meta-python?

Fixes in v2 include passing --root=${D} to pip install (rather than --target)
and also passing --prefix so that scripts are (usually) installed in the proper
location. pip install also 'helpfully' overwrites python3 intepreter with nativepython3
in #!, so add a fix to return the values to what is actually correct (similar to what is
done in setuptools3.bbclass). Also several recipes still needed PIP_INSTALL_PACKAGE defined.

Also added self as maintainer of new recipes.

[YOCTO #14638]

[1] https://www.python.org/dev/peps/pep-0517/

The following changes since commit 41ae26ecab731f2fb6593df143476c94183be209:

  releases: update to include 3.4.2 (2022-02-21 16:46:22 +0000)

are available in the Git repository at:

  git://git.yoctoproject.org/git/poky-contrib timo/bootstrap-wheels
  http://git.yoctoproject.org/cgit.cgi/git/poky-contrib/log/?h=timo/bootstrap-wheels

Tim Orling (32):
  python3-wheel: move 0.37.0 from meta-python
  python3-flit-core: add recipe for 3.6.0
  flit_core.bbclass: add helper for newer python packaging
  python3-wheel: inherit flit_core
  pip_install_wheel.bbclass: add helper class
  setuptools_build_meta.bbclass: add helper class
  python3-pip: inherit setuptools_build_meta
  python3-attrs: inherit setuptools_build_meta
  python3-git: inherit setuptools_build_meta
  python3-pytest: inherit setuptools_build_meta
  python3-setuptools-scm: inherit setuptools_build_meta
  python3-zipp: inherit setuptools_build_meta
  python3-iniconfig: inherit setuptools_build_meta
  python3-py: inherit setuptools_build_meta
  python3-pluggy: inherit setuptools_build_meta
  python3-setuptools: inherit setuptools_base_meta
  setuptools3.bbclass: refactor for wheels
  python3-more-itertools: set PIP_INSTALL_PACKAGE
  meson: inherit setuptools_build_meta
  python3-libarchive-d: set PIP_INSTALL_PACKAGE
  python3-smartypants: patch hash bang to python3
  python3-scons: merge -native recipe
  python3-subunit: merge inc; set PIP_INSTALL_PACKAGE
  python3-magic: set PIP_INSTALL_PACKAGE
  bmap-tools: set PIP_INSTALL_PACKAGE, BASEVER
  asciidoc: set PIP_INSTALL_PACKAGE
  gi-docgen: set PIP_INSTALL_PACKAGE
  numpy: set PIP_INSTALL_PACKAGE
  python3-dbusmock: set PIP_INSTALL_PACKAGE
  python3-mako: inherit setuptools_build_meta
  python3-packaging: inherit setuptools_build_meta
  python3-nose: drop recipe

 meta/classes/flit_core.bbclass                |  16 +++
 meta/classes/pip_install_wheel.bbclass        |  37 +++++++
 meta/classes/setuptools3.bbclass              |  20 ++--
 meta/classes/setuptools_build_meta.bbclass    |  18 ++++
 meta/conf/distro/include/maintainers.inc      |   3 +-
 meta/recipes-devtools/meson/meson_0.61.2.bb   |   4 +-
 meta/recipes-devtools/python/python-nose.inc  |  18 ----
 .../python/python-subunit.inc                 |  14 ---
 .../python/python3-attrs_21.4.0.bb            |   2 +-
 .../python/python3-dbusmock_0.25.0.bb         |   1 +
 .../python/python3-flit-core_3.6.0.bb         |  41 +++++++
 .../python/python3-git_3.1.26.bb              |   2 +-
 .../python/python3-iniconfig_1.1.1.bb         |   4 +-
 .../python/python3-libarchive-c_4.0.bb        |   2 +
 .../python/python3-magic_0.4.25.bb            |   1 +
 .../python/python3-mako_1.1.6.bb              |   2 +-
 .../python/python3-more-itertools_8.12.0.bb   |   2 +
 .../python/python3-nose_1.3.7.bb              |   2 -
 .../python/python3-numpy_1.22.2.bb            |   1 +
 .../python/python3-packaging_21.3.bb          |   2 +-
 .../python/python3-pip_22.0.3.bb              |  19 +++-
 .../python/python3-pluggy_1.0.0.bb            |   2 +-
 .../python/python3-py_1.11.0.bb               |   2 +-
 .../python/python3-pytest_7.0.1.bb            |   4 +-
 .../python/python3-scons-native_4.3.0.bb      |   7 --
 .../python/python3-scons_4.3.0.bb             |  13 ++-
 .../python/python3-setuptools-scm_6.4.2.bb    |   2 +-
 .../python/python3-setuptools_59.5.0.bb       |  19 +++-
 .../0001-Change-hash-bang-to-python3.patch    |  47 ++++++++
 .../python/python3-smartypants_2.0.0.bb       |   1 +
 ...001-setup.py-use-vendored-_distutils.patch |  27 +++++
 .../python/python3-strict-rfc3339_0.7.bb      |   4 +-
 .../python/python3-subunit_1.4.0.bb           |  17 ++-
 ...roject.toml-from-flit-backend-branch.patch | 100 ++++++++++++++++++
 .../python/python3-wheel_0.37.1.bb            |  24 +++++
 .../python/python3-zipp_3.7.0.bb              |   2 +-
 .../asciidoc/asciidoc_10.1.1.bb               |   1 +
 meta/recipes-gnome/gi-docgen/gi-docgen_git.bb |   1 +
 .../{bmap-tools_3.6.bb => bmap-tools_git.bb}  |   6 +-
 39 files changed, 412 insertions(+), 78 deletions(-)
 create mode 100644 meta/classes/flit_core.bbclass
 create mode 100644 meta/classes/pip_install_wheel.bbclass
 create mode 100644 meta/classes/setuptools_build_meta.bbclass
 delete mode 100644 meta/recipes-devtools/python/python-nose.inc
 delete mode 100644 meta/recipes-devtools/python/python-subunit.inc
 create mode 100644 meta/recipes-devtools/python/python3-flit-core_3.6.0.bb
 delete mode 100644 meta/recipes-devtools/python/python3-nose_1.3.7.bb
 delete mode 100644 meta/recipes-devtools/python/python3-scons-native_4.3.0.bb
 create mode 100644 meta/recipes-devtools/python/python3-smartypants/0001-Change-hash-bang-to-python3.patch
 create mode 100644 meta/recipes-devtools/python/python3-strict-rfc3339/0001-setup.py-use-vendored-_distutils.patch
 create mode 100644 meta/recipes-devtools/python/python3-wheel/0001-Backport-pyproject.toml-from-flit-backend-branch.patch
 create mode 100644 meta/recipes-devtools/python/python3-wheel_0.37.1.bb
 rename meta/recipes-support/bmap-tools/{bmap-tools_3.6.bb => bmap-tools_git.bb} (86%)

-- 
2.30.2



             reply	other threads:[~2022-02-21 21:23 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-21 21:23 Tim Orling [this message]
2022-02-21 21:23 ` [PATCH v2 01/32] python3-wheel: move 0.37.0 from meta-python Tim Orling
2022-02-23 16:01   ` [OE-core] " Khem Raj
2022-02-23 17:01     ` Tim Orling
2022-02-21 21:23 ` [PATCH v2 02/32] python3-flit-core: add recipe for 3.6.0 Tim Orling
2022-02-21 21:23 ` [PATCH v2 03/32] flit_core.bbclass: add helper for newer python packaging Tim Orling
2022-02-21 21:23 ` [PATCH v2 04/32] python3-wheel: inherit flit_core Tim Orling
2022-02-21 21:23 ` [PATCH v2 05/32] pip_install_wheel.bbclass: add helper class Tim Orling
2022-02-21 21:23 ` [PATCH v2 06/32] setuptools_build_meta.bbclass: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 07/32] python3-pip: inherit setuptools_build_meta Tim Orling
2022-02-21 21:23 ` [PATCH v2 08/32] python3-attrs: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 09/32] python3-git: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 10/32] python3-pytest: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 11/32] python3-setuptools-scm: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 12/32] python3-zipp: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 13/32] python3-iniconfig: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 14/32] python3-py: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 15/32] python3-pluggy: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 16/32] python3-setuptools: inherit setuptools_base_meta Tim Orling
2022-02-21 21:23 ` [PATCH v2 17/32] setuptools3.bbclass: refactor for wheels Tim Orling
2022-02-21 21:23 ` [PATCH v2 18/32] python3-more-itertools: set PIP_INSTALL_PACKAGE Tim Orling
2022-02-21 21:23 ` [PATCH v2 19/32] meson: inherit setuptools_build_meta Tim Orling
2022-02-22  6:55   ` [OE-core] " Oleksiy Obitotskyi -X (oobitots - GLOBALLOGIC INC at Cisco)
2022-02-21 21:23 ` [PATCH v2 20/32] python3-libarchive-d: set PIP_INSTALL_PACKAGE Tim Orling
2022-02-21 21:23 ` [PATCH v2 21/32] python3-smartypants: patch hash bang to python3 Tim Orling
2022-02-21 21:23 ` [PATCH v2 22/32] python3-scons: merge -native recipe Tim Orling
2022-02-21 21:23 ` [PATCH v2 23/32] python3-subunit: merge inc; set PIP_INSTALL_PACKAGE Tim Orling
2022-02-21 21:23 ` [PATCH v2 24/32] python3-magic: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 25/32] bmap-tools: set PIP_INSTALL_PACKAGE, BASEVER Tim Orling
2022-02-21 21:23 ` [PATCH v2 26/32] asciidoc: set PIP_INSTALL_PACKAGE Tim Orling
2022-02-21 21:23 ` [PATCH v2 27/32] gi-docgen: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 28/32] numpy: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 29/32] python3-dbusmock: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 30/32] python3-mako: inherit setuptools_build_meta Tim Orling
2022-02-21 21:23 ` [PATCH v2 31/32] python3-packaging: " Tim Orling
2022-02-21 21:23 ` [PATCH v2 32/32] python3-nose: drop recipe Tim Orling
2022-02-22 22:24   ` [OE-core] " Khem Raj
2022-02-22 22:33     ` Tim Orling
2022-02-22 17:22 ` [OE-core] [PATCH v2 00/32] Python PEP-517: build wheels and install with pip Khem Raj
2022-02-22 18:21   ` Tim Orling
2022-02-22 18:23     ` Khem Raj
2022-02-22 18:39       ` Tim Orling
2022-02-22 18:43         ` Tim Orling
2022-02-22 19:18         ` Khem Raj
2022-02-22 19:22           ` Tim Orling
2022-02-24  4:06             ` Khem Raj
2022-02-24  4:50               ` Tim Orling
     [not found]               ` <16D69FA5F268A6BB.31711@lists.openembedded.org>
2022-02-24  5:42                 ` Tim Orling

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cover.1645478020.git.tim.orling@konsulko.com \
    --to=ticotimo@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.