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

Joshua Kramer joskra42.list at gmail.com
Sat Jun 9 18:33:20 UTC 2018


I had actually attempted to do just that, and ran into another
interesting problem.  When I install rh-python36-python-devel package,
it breaks the RPM database in some way.  With that package installed,
every time I do anything with RPM, I get several instances of this
error message:  "error: Macro % has illegal name (%define)"

This error does not interfere with the ability of RPM to install or
remove packages.  However, as part of the rpmbuild process,
dependencies of RPM packages are checked.  When this occurs, some
program spits out several instances of that error message, and the
program returns with an error.  RPMBUILD then aborts the build when it
detects the error.

I know the error is a bash shell error, but I have not yet determined
what in the -devel package is broken in such a way to cause that error
to occur whenever RPM is run.

On Sat, Jun 9, 2018 at 12:03 PM, Charalampos Stratakis
<cstratak at redhat.com> wrote:
>
>
> ----- 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