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

Joshua Kramer joskra42.list at gmail.com
Sat Jun 9 14:47:43 UTC 2018


> 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?




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




More information about the SCLorg mailing list