[v2] pip_install_wheel: install wheel with a glob

Message ID 20220309165113.2757010-1-ross.burton@arm.com
State Accepted, archived
Commit e6e4c63bbdd09d91428e55cb5a852170511f05cc
Headers show
Series [v2] pip_install_wheel: install wheel with a glob | expand

Commit Message

Ross Burton March 9, 2022, 4:51 p.m. UTC
Now that the build systems that use pip_install_wheel are all building
their wheel into a directory that we knew was empty before, we can just
install *.whl and not need to know the precise names.

By design a pyproject.toml will always build a single wheel, so there
shouldn't be any way for this to end up installing more than expected.

This obsoletes PIP_INSTALL_PACKAGE and PYPA_WHEEL, neither of which are
needed anymore.

Signed-off-by: Ross Burton <ross.burton@arm.com>
---
 meta/classes/pip_install_wheel.bbclass | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

Comments

Khem Raj March 9, 2022, 5:14 p.m. UTC | #1
On Wed, Mar 9, 2022 at 8:51 AM Ross Burton <ross@burtonini.com> wrote:
>
> Now that the build systems that use pip_install_wheel are all building
> their wheel into a directory that we knew was empty before, we can just
> install *.whl and not need to know the precise names.
>
> By design a pyproject.toml will always build a single wheel, so there
> shouldn't be any way for this to end up installing more than expected.
>
> This obsoletes PIP_INSTALL_PACKAGE and PYPA_WHEEL, neither of which are
> needed anymore.
>

this looks a better approach, we can unbold ton of workaround on
meta-openembedded with this

> Signed-off-by: Ross Burton <ross.burton@arm.com>
> ---
>  meta/classes/pip_install_wheel.bbclass | 20 ++++++++------------
>  1 file changed, 8 insertions(+), 12 deletions(-)
>
> diff --git a/meta/classes/pip_install_wheel.bbclass b/meta/classes/pip_install_wheel.bbclass
> index 954a6b750f..3861dae75a 100644
> --- a/meta/classes/pip_install_wheel.bbclass
> +++ b/meta/classes/pip_install_wheel.bbclass
> @@ -1,20 +1,10 @@
>  DEPENDS:append = " python3-pip-native"
>
> -def guess_pip_install_package_name(d):
> -    import re
> -    '''https://www.python.org/dev/peps/pep-0491/#escaping-and-unicode'''
> -    name = d.getVar('PYPI_PACKAGE') or re.sub(r"^python3-", "", d.getVar('BPN'))
> -    return name.replace('-', '_')
> -
> -PIP_INSTALL_PACKAGE ?= "${@guess_pip_install_package_name(d)}"
> -
>  # The directory where wheels should be written too. Build classes
>  # will ideally [cleandirs] this but we don't do that here in case
>  # a recipe wants to install prebuilt wheels.
>  PIP_INSTALL_DIST_PATH ?= "${WORKDIR}/dist"
>
> -PYPA_WHEEL ??= "${PIP_INSTALL_DIST_PATH}/${PIP_INSTALL_PACKAGE}-*-*.whl"
> -
>  PIP_INSTALL_ARGS = "\
>      -vvvv \
>      --ignore-installed \
> @@ -29,8 +19,14 @@ PIP_INSTALL_PYTHON = "python3"
>  PIP_INSTALL_PYTHON:class-native = "nativepython3"
>
>  pip_install_wheel_do_install () {
> -    nativepython3 -m pip install ${PIP_INSTALL_ARGS} ${PYPA_WHEEL} ||
> -      bbfatal_log "Failed to pip install wheel. Check the logs."
> +    COUNT=$(find ${PIP_INSTALL_DIST_PATH} -name '*.whl' | wc -l)
> +    if test $COUNT -eq 0; then
> +        bbfatal No wheels found in ${PIP_INSTALL_DIST_PATH}
> +    elif test $COUNT -gt 1; then
> +        bbfatal More than one wheel found in ${PIP_INSTALL_DIST_PATH}, this should not happen
> +    fi
> +
> +    nativepython3 -m pip install ${PIP_INSTALL_ARGS} ${PIP_INSTALL_DIST_PATH}/*.whl
>
>      cd ${D}
>      for i in ${D}${bindir}/* ${D}${sbindir}/*; do
> --
> 2.25.1
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#162975): https://lists.openembedded.org/g/openembedded-core/message/162975
> Mute This Topic: https://lists.openembedded.org/mt/89666433/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Tim Orling March 9, 2022, 6:47 p.m. UTC | #2
On Wed, Mar 9, 2022 at 9:14 AM Khem Raj <raj.khem@gmail.com> wrote:

> On Wed, Mar 9, 2022 at 8:51 AM Ross Burton <ross@burtonini.com> wrote:
> >
> > Now that the build systems that use pip_install_wheel are all building
> > their wheel into a directory that we knew was empty before, we can just
> > install *.whl and not need to know the precise names.
> >
> > By design a pyproject.toml will always build a single wheel, so there
> > shouldn't be any way for this to end up installing more than expected.
> >
> > This obsoletes PIP_INSTALL_PACKAGE and PYPA_WHEEL, neither of which are
> > needed anymore.
> >
>
> this looks a better approach, we can unbold ton of workaround on
> meta-openembedded with this


Agreed. The second set of eyes on this is improving things dramatically.


>
> > Signed-off-by: Ross Burton <ross.burton@arm.com>
> > ---
> >  meta/classes/pip_install_wheel.bbclass | 20 ++++++++------------
> >  1 file changed, 8 insertions(+), 12 deletions(-)
> >
> > diff --git a/meta/classes/pip_install_wheel.bbclass
> b/meta/classes/pip_install_wheel.bbclass
> > index 954a6b750f..3861dae75a 100644
> > --- a/meta/classes/pip_install_wheel.bbclass
> > +++ b/meta/classes/pip_install_wheel.bbclass
> > @@ -1,20 +1,10 @@
> >  DEPENDS:append = " python3-pip-native"
> >
> > -def guess_pip_install_package_name(d):
> > -    import re
> > -    '''https://www.python.org/dev/peps/pep-0491/#escaping-and-unicode'
> ''
> > -    name = d.getVar('PYPI_PACKAGE') or re.sub(r"^python3-", "",
> d.getVar('BPN'))
> > -    return name.replace('-', '_')
> > -
> > -PIP_INSTALL_PACKAGE ?= "${@guess_pip_install_package_name(d)}"
> > -
> >  # The directory where wheels should be written too. Build classes
> >  # will ideally [cleandirs] this but we don't do that here in case
> >  # a recipe wants to install prebuilt wheels.
> >  PIP_INSTALL_DIST_PATH ?= "${WORKDIR}/dist"
> >
> > -PYPA_WHEEL ??= "${PIP_INSTALL_DIST_PATH}/${PIP_INSTALL_PACKAGE}-*-*.whl"
> > -
> >  PIP_INSTALL_ARGS = "\
> >      -vvvv \
> >      --ignore-installed \
> > @@ -29,8 +19,14 @@ PIP_INSTALL_PYTHON = "python3"
> >  PIP_INSTALL_PYTHON:class-native = "nativepython3"
> >
> >  pip_install_wheel_do_install () {
> > -    nativepython3 -m pip install ${PIP_INSTALL_ARGS} ${PYPA_WHEEL} ||
> > -      bbfatal_log "Failed to pip install wheel. Check the logs."
> > +    COUNT=$(find ${PIP_INSTALL_DIST_PATH} -name '*.whl' | wc -l)
> > +    if test $COUNT -eq 0; then
> > +        bbfatal No wheels found in ${PIP_INSTALL_DIST_PATH}
> > +    elif test $COUNT -gt 1; then
> > +        bbfatal More than one wheel found in ${PIP_INSTALL_DIST_PATH},
> this should not happen
> > +    fi
> > +
> > +    nativepython3 -m pip install ${PIP_INSTALL_ARGS}
> ${PIP_INSTALL_DIST_PATH}/*.whl
> >
> >      cd ${D}
> >      for i in ${D}${bindir}/* ${D}${sbindir}/*; do
> > --
> > 2.25.1
> >
> >
> >
> >
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#162981):
> https://lists.openembedded.org/g/openembedded-core/message/162981
> Mute This Topic: https://lists.openembedded.org/mt/89666433/924729
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [
> ticotimo@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
>

Patch

diff --git a/meta/classes/pip_install_wheel.bbclass b/meta/classes/pip_install_wheel.bbclass
index 954a6b750f..3861dae75a 100644
--- a/meta/classes/pip_install_wheel.bbclass
+++ b/meta/classes/pip_install_wheel.bbclass
@@ -1,20 +1,10 @@ 
 DEPENDS:append = " python3-pip-native"
 
-def guess_pip_install_package_name(d):
-    import re
-    '''https://www.python.org/dev/peps/pep-0491/#escaping-and-unicode'''
-    name = d.getVar('PYPI_PACKAGE') or re.sub(r"^python3-", "", d.getVar('BPN'))
-    return name.replace('-', '_')
-
-PIP_INSTALL_PACKAGE ?= "${@guess_pip_install_package_name(d)}"
-
 # The directory where wheels should be written too. Build classes
 # will ideally [cleandirs] this but we don't do that here in case
 # a recipe wants to install prebuilt wheels.
 PIP_INSTALL_DIST_PATH ?= "${WORKDIR}/dist"
 
-PYPA_WHEEL ??= "${PIP_INSTALL_DIST_PATH}/${PIP_INSTALL_PACKAGE}-*-*.whl"
-
 PIP_INSTALL_ARGS = "\
     -vvvv \
     --ignore-installed \
@@ -29,8 +19,14 @@  PIP_INSTALL_PYTHON = "python3"
 PIP_INSTALL_PYTHON:class-native = "nativepython3"
 
 pip_install_wheel_do_install () {
-    nativepython3 -m pip install ${PIP_INSTALL_ARGS} ${PYPA_WHEEL} ||
-      bbfatal_log "Failed to pip install wheel. Check the logs."
+    COUNT=$(find ${PIP_INSTALL_DIST_PATH} -name '*.whl' | wc -l)
+    if test $COUNT -eq 0; then
+        bbfatal No wheels found in ${PIP_INSTALL_DIST_PATH}
+    elif test $COUNT -gt 1; then
+        bbfatal More than one wheel found in ${PIP_INSTALL_DIST_PATH}, this should not happen
+    fi
+
+    nativepython3 -m pip install ${PIP_INSTALL_ARGS} ${PIP_INSTALL_DIST_PATH}/*.whl
 
     cd ${D}
     for i in ${D}${bindir}/* ${D}${sbindir}/*; do