4

What I Want To Do

I'm trying to build an RPM package of my app that could be installed in different Fedora distros, which have different default Python 3 versions (i.e. Fedora 28 has python3.6, and Fedora 29 has python3.7)

I'm using this to build an RPM

python3 setup.py bdist_rpm

The Problem

If I build it on Fedora 28, then the RPM will have my python files in /usr/lib/python3.6/site-packages.

When a users installs it on Fedora 29, where a default Python is 3.7, it won't find my package because it looks into /usr/lib/python3.7/site-packages.

So when a user launches the app it naturally fails with error "No module named 'myappname'".

The Solution That I Don't Like

I can build multiple RPM packages -- one in Fedora 28 and another one in 29

Instead, I'd like to build one RPM that works in both distros.

What I Tried

I tried adding python37 as a dependency, but then app fails too because it cannot import dependencies like python-Levenshtein -- all dependencies are installed in /usr/lib/python3.6/site-packages

My spec file is here.

  • Follow the instructions: https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/ – Michael Hampton Dec 15 '18 at 17:11
  • @MichaelHampton Thanks for the link. I actually read that page multiple times but didn't find an answer to my question there. – Olek Gornostal Dec 15 '18 at 19:07
  • Your spec file doesn't use the `%py3_build` or `%py3_install` macros as it is meant to do. See also the example spec file on that page for how you should use the macros to build and install files. – Michael Hampton Dec 15 '18 at 19:19
  • I've looked at those macroses in `/usr/lib/rpm/macros.d/macros.python3`, similar %build and %install commands can be created by passing proper arguments to `bdist_rpm`. But that always produces a single directory under `/usr/lib`. I think that in order to have a single RPM package I have to copy `site-packages` to both `python3.7` and `python3.6` dirs. – Olek Gornostal Dec 15 '18 at 19:49
  • 1
    Oh, I think I understand what you're after. You're not supposed to do that. Build a package on Fedora 28 and a separate package on Fedora 29. This is literally the way every other package is built. – Michael Hampton Dec 15 '18 at 20:29
  • I guess I'm going to have to build separate packages. Thanks for looking into this @MichaelHampton – Olek Gornostal Dec 15 '18 at 20:46

0 Answers0