[scl.org] rh-python36 SPEC file question (circular dependency)

Charalampos Stratakis cstratak at redhat.com
Sat Jun 9 16:03:44 UTC 2018



----- Original Message -----
> From: "Joshua Kramer" <joskra42.list at gmail.com>
> To: "Charalampos Stratakis" <cstratak at redhat.com>, sclorg at redhat.com
> Sent: Saturday, June 9, 2018 4:47:43 PM
> Subject: Re: [scl.org] rh-python36 SPEC file question (circular dependency)
> 
> > Long story short:
> > 1. Build python with rehweel set to 0.
> .....
> 
> I got further with these steps, but there are some omissions.  I
> attempted to build python.spec as the first step (after setting
> with_rewheel to 0), but it complained about a missing dependency of
> rh-python36.  So I then built the rh-python36 metapackage first, and I
> had to install that as root.  The first pass of python.spec then built
> successfully.
> 
> I then modified python-setuptools.spec to disable build_wheel, and
> attempted to build.  It failed because it requires rh-python36-devel.
> So I attempt to install that package as root, and there are additional
> dependency issues:
>         /opt/rh/rh-python36/root/usr/bin/python3.6m is needed by
> rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl
>         libpython3.6m.so.rh-python36-1.0 is needed by
> rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl
>         python(abi) = 3.6 is needed by
> rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl
>         rh-python36-python(armv7hnl-32) = 3.6.3-3.el7.centos is needed
> by rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl
>         rh-python36-python-libs(armv7hnl-32) = 3.6.3-3.el7.centos is
> needed by rh-python36-python-devel-3.6.3-3.el7.centos.armv7hl
> 
> I've attempted various combinations of force-installing the packages I
> have, with various other issues.  So what is the correct next step in
> getting the setuptools package to build?
> 
> 

Without something which contains a dependency solver you will have to manually install the packages at your system.

At this point it seems that you will have to install the python-devel, python and python-libs.

You can check the dependencies of each rpm by invoking 'rpm -qp --requires <rpm>', or by examining the %package
directives at the SPEC file of python. Although without doing it in some sort of build system (e.g. centos/fedora builds system),
you will have to manually inspect what the dependencies are each time.

Please let me know if that worked for you.

> 
> 
> On Fri, Jun 8, 2018 at 12:10 PM, Charalampos Stratakis
> <cstratak at redhat.com> wrote:
> >
> >
> > ----- Original Message -----
> >> From: "Joshua Kramer" <joskra42.list at gmail.com>
> >> To: "Neal Gompa" <ngompa13 at gmail.com>
> >> Cc: sclorg at redhat.com
> >> Sent: Thursday, June 7, 2018 2:22:56 PM
> >> Subject: Re: [scl.org] rh-python36 SPEC file question (circular
> >> dependency)
> >>
> >> Thanks, Neal!  That got me a little farther.  Per the comments at the
> >> top of they python.spec file, I set with_rewheel to 0, then I built
> >> the Python RPM.  That seems to have worked.
> >>
> >> Now, when I attempt to build setuptools, using this command:
> >> rpmbuild -ba ./python-setuptools.spec --define 'scl rh-python36' >
> >> python-setuptools-build.log 2>&1
> >>
> >> ...the build command fails with these errors:
> >> error: Failed build dependencies:
> >>         rh-python36-python-devel is needed by
> >> rh-python36-python-setuptools-36.5.0-1.el7.centos.noarch
> >>         rh-python36-python-pip is needed by
> >> rh-python36-python-setuptools-36.5.0-1.el7.centos.noarch
> >>         rh-python36-python-wheel is needed by
> >> rh-python36-python-setuptools-36.5.0-1.el7.centos.noarch
> >>
> >> Attempting to build the python-pip package results in similar errors.
> >>
> >> I have the following packages installed:
> >> rh-python36-2.0-1.el7.src.rpm
> >> rh-python36-python-3.6.3-3.el7.src.rpm
> >> rh-python36-python-pip-9.0.1-2.el7.src.rpm
> >> rh-python36-python-psycopg2-2.7.3-1.el7.src.rpm
> >> rh-python36-python-setuptools-36.5.0-1.el7.src.rpm
> >> rh-python36-python-virtualenv-15.1.0-2.el7.src.rpm
> >> rh-python36-python-wheel-0.30.0a0-1.el7.src.rpm
> >> rh-python36-scipy-0.19.1-2.el7.src.rpm
> >>
> >> What should I look for next?
> >>
> >> Thanks!
> >>
> >
> > Hello. I am one of the maintainers for that collection so feel free to ping
> > me
> > directly, either on IRC or mail.
> >
> > Sorry for the complications you are facing, bootstrapping the interpreter
> > to an rpm
> > is indeed a quite complex procedure and it could be documented better.
> >
> > I will try to outline the steps with some explanations.
> >
> > Firstly, python bundles pip and setuptools, so ideally we'd like python to
> > utilize the system
> > installed packages instead of the bundled ones. What happens is that we
> > first compile python
> > including the bundled wheels (that's when we set the 'rewheel' macro to 0).
> >
> > Then we'd like to build pip and setuptools in the wheel [0] format so they
> > can be utilized by python.
> > However we still do not have the 'wheel' package built in order to do that,
> > so we'll have to (byte)compile
> > them the usual way, then compile wheel, and then build again python and
> > setuptools as wheels.
> >
> > So you should set the build_wheel macro in python-pip's and
> > python-setuptools' SPEC file to 0, build them and then
> > build the python-wheel package.
> >
> > Then after you have built python-wheel, rebuild python-pip and
> > python-setuptools with the build_wheel macro macro set to 1,
> > as we can create the wheel format now since we have the wheel package on
> > our system.
> >
> > Finally rebuild python with rewheel set to 1 in order for python to strip
> > the bundled wheels and utilize the system installed
> > ones (with a little bit of magic [1].
> >
> > Long story short:
> > 1. Build python with rehweel set to 0.
> > 2. Build python-setuptools and python-pip with build_wheel set to 0.
> > 3. Build python-wheel.
> > 4. Build python-setuptools and python-pip with build_wheel set to 1.
> > 5. Build python with rehweel set to 1.
> >
> > I hope that helps (and I hope I didn't forget any steps :) ).
> >
> > [0] https://pythonwheels.com/
> > [1]
> > https://github.com/fedora-python/rewheel/blob/master/rewheel/__init__.py
> >
> >> On Mon, Jun 4, 2018 at 10:23 PM, Neal Gompa <ngompa13 at gmail.com> wrote:
> >> > On Mon, Jun 4, 2018 at 9:38 PM Joshua Kramer <joskra42.list at gmail.com>
> >> > wrote:
> >> >>
> >> >> Hello,
> >> >>
> >> >> I am trying to compile rh-python36 to use with CentOS on a Raspberry
> >> >> Pi.
> >> >>
> >> >> On line 192 of the SPEC file are these lines:
> >> >> %if 0%{?with_rewheel}
> >> >> BuildRequires: %{?scl_prefix}python-setuptools
> >> >> BuildRequires: %{?scl_prefix}python-pip
> >> >> %endif
> >> >>
> >> >> What is this supposed to do?  It prevents the package from building,
> >> >> because there is a circular dependency- if I try to build python36, it
> >> >> complains that python36-setuptools and python36-pip are not
> >> >> installed... but I can't install those without having Python installed
> >> >> first.  If I comment those lines out I get no error and the build
> >> >> almost completes.  (It then fails the "multiprocessing" test, but
> >> >> that's beside the point.)  However, I don't want to break something by
> >> >> commenting them out... so is there a better or "right" way to get rid
> >> >> of the circular dependency?
> >> >>
> >> >
> >> > Python is a two-cycle build. You build the first time with rewheel
> >> > disabled (that removes those BRs), then after that's successfully
> >> > built, you use those artifacts to build again with rewheel enabled.
> >> >
> >> >
> >> > --
> >> > 真実はいつも一つ!/ Always, there's only one truth!
> >>
> >> _______________________________________________
> >> SCLorg mailing list
> >> SCLorg at redhat.com
> >> https://www.redhat.com/mailman/listinfo/sclorg
> >>
> >
> > --
> > Regards,
> >
> > Charalampos Stratakis
> > Software Engineer
> > Python Maintenance Team, Red Hat
> 

-- 
Regards,

Charalampos Stratakis
Software Engineer
Python Maintenance Team, Red Hat




More information about the SCLorg mailing list