'sip-distinfo not found' following update to SIP v6.6.2
Vautrin, Yohann
Yohann.Vautrin at cnrc-nrc.gc.ca
Mon Jul 18 20:17:38 BST 2022
> -----Original Message-----
> From: Phil Thompson [mailto:phil at riverbankcomputing.com]
> Sent: July 18, 2022 12:29 PM
> To: Vautrin, Yohann <Yohann.Vautrin at cnrc-nrc.gc.ca>
> Cc: pyqt at riverbankcomputing.com
> Subject: Re: 'sip-distinfo not found' following update to SIP v6.6.2
>
> On 18/07/2022 15:03, Vautrin, Yohann wrote:
> > Hi Phil,
> >
> >> -----Original Message-----
> >> From: Phil Thompson [mailto:phil at riverbankcomputing.com]
> >> Sent: July 17, 2022 5:40 AM
> >> To: Vautrin, Yohann <Yohann.Vautrin at cnrc-nrc.gc.ca>
> >> Cc: pyqt at riverbankcomputing.com
> >> Subject: Re: 'sip-distinfo not found' following update to SIP v6.6.2
> >>
> >> On 07/07/2022 20:20, Vautrin, Yohann wrote:
> >> > Hi,
> >> >
> >> > I'm using PyQt-builder and SIP to wrap a Qt-based library for
> >> > Python and I've had issues with the latest versions of PyQt-builder
> >> > (v1.13.0) and SIP (v6.6.2).
> >> >
> >> > When I build the wheel for my package (by calling "python -m
> >> > build"), the process ends with the following messages:
> >> > /home/user/.pyenv/versions/dev-3.8/lib/python3.8/site-
> >> packages/pep517/
> >> > in_process/sip-distinfo --inventory /tmp/tmp45zsfozw/inventory.txt
> >> > --project-root /home/user/dev/MyProject/bindings/pyqt5-sip --prefix
> ""
> >> > --generator _in_process.py --wheel-tag
> >> > cp37-abi3-manylinux_2_35_x86_64 --requires-dist "PyQt5-sip (>=12.11,
> <13)"
> >> > /tmp/tmp45zsfozw/wheel/PyQt5_MyProject-1.0.0.dist-info
> >> > /bin/sh: line 1:
> >> > /home/user/.pyenv/versions/dev-3.8/lib/python3.8/site-
> >> packages/pep517/in_process/sip-distinfo:
> >> > No such file or directory
> >> > make: *** [Makefile:340: install_distinfo] Error 127
> >> > _in_process.py: 'make install' failed returning 2
> >> >
> >> > I believe the cause of this issue is the recent change mentioned in
> >> > the changelog for SIP related to the PEP 517 build process
> >> > (changeset
> >> > 2768 with hash 98dbce3e62f1 in Mercurial). I've noticed that there
> >> > are still mentions of "pep517" as a possible value for "tool" in
> >> > PyQt-builder and removing code as shown in the diff below in
> >> > pyqtbuild/builder.py seems to fix my problem:
> >> > ------------------------------------------------------
> >> > diff -ru a/builder.py b/builder.py
> >> > --- a/builder.py 2022-07-06 15:47:58.095535865 -0400
> >> > +++ b/builder.py 2022-07-06 15:48:22.804522406 -0400
> >> > @@ -51,15 +51,6 @@
> >> > """ Set default values for user options that haven't been
> >> > set yet. """
> >> >
> >> > if tool in Option.BUILD_TOOLS:
> >> > - # A PEP 517 frontend will set PATH so that sip-distinfo is
> >> > found on
> >> > - # it. However for our own frontends we want to use the
> >> > version
> >> > - # corresponding to the frontend (and, anyway, the frontend
> >> > may not
> >> > - # be on PATH).
> >> > - if tool != 'pep517':
> >> > - self._sip_distinfo = os.path.join(
> >> > - os.path.abspath(os.path.dirname(sys.argv[0])),
> >> > - self._sip_distinfo)
> >> > -
> >> > # Check we have a qmake.
> >> > if self.qmake is None:
> >> > self.qmake = self._find_exe('qmake')
> >> > ------------------------------------------------------
> >> >
> >> > With this change the build process works, at least in non-isolated
> >> > environment.
> >>
> >> When using "python -m build" can you tell me what the value of
> >> sys.argv[0] is at that part of the code?
> >
> > When I run "python -m build --wheel -n", sys.argv contains the
> > following:
> > ['/home/user/.pyenv/versions/myproject-dev-3.8/lib/python3.8/site-pack
> > ages/pep517/in_process/_in_process.py',
> > 'build_wheel', '/tmp/tmphvrzvu2_']
> >
> > Using sys.executable instead of sys.argv[0] in the code to set
> > self._sip_distinfo does work in a non-isolated build and it seems that
> > it should work for an isolated build as well. At runtime in
> > _in_process.py, sys.executable points to bin/python in the virtualenv
> > created by the build module so sip-distinfo should be located in the
> > same directory as the python command.
>
> The problem being solved is ensuring that the sip-distinfo being used is the
> one associated with the sip-build/sip-install etc. being used and not one that
> might be on PATH.
>
> I've changed the test to see if argv[0] is sip-build/sip-install etc.
I've tried the fix you pushed to Mercurial and this fixes my issue, thanks a lot!
On a related note, I've noticed that in the dist-info the name of the generator is (IMHO) incorrect. With the build module, it is set to "Generator: _in_process.py 6.6.2" whereas it is "Generator: sip-wheel 6.6.2" when sip-wheel is used.
I've traced the origin of that to "build_project" (in pyqtbuild/builder.py) and it is also related to the use of sys.argv[0] when "project.get_sip_distinfo_command_line" is called (around line 230). Since the version of the generator is already set to "SIP_VERSION_STR", shouldn't "sip-wheel" be hardcoded in create_distinfo (in sipbuild/distinfo/distinfo.py) as well and the option to provide the name of the generator removed?
I've created a minimal working example of my project, available at https://github.com/YVautrin/PyQtBindingsExample/, in case this helps you. In the root directory you can run either "python -m build --wheel" or "sip-wheel" to build the project. The pyproject.toml file points to the tip of the Mercurial repository of PyQt-builder so the fix you pushed today is used in the isolated build.
--
Yohann
More information about the PyQt
mailing list