Churchyard (talk | contribs) No edit summary |
Churchyard (talk | contribs) No edit summary |
||
(4 intermediate revisions by the same user not shown) | |||
Line 20: | Line 20: | ||
|python_default_prefix_only3||python3-||(empty string) | |python_default_prefix_only3||python3-||(empty string) | ||
|} | |} | ||
Note: The Fedora release since when Python 3 is the default might change. | |||
Example spec file using this approach: | Example spec file using this approach: | ||
Line 33: | Line 35: | ||
BuildArch: noarch | BuildArch: noarch | ||
# | # python3-devel or python2-devel | ||
BuildRequires: %{python_default_devel} | BuildRequires: %{python_default_devel} | ||
# | # python3-setuptools or python-setuptools | ||
BuildRequires: %{python_default_prefix}setuptools | BuildRequires: %{python_default_prefix}setuptools | ||
# | # python3-pytest or pytest | ||
BuildRequires: %{python_default_prefix_only3}pytest | BuildRequires: %{python_default_prefix_only3}pytest | ||
Line 56: | Line 58: | ||
%prep | %prep | ||
%setup -q | %setup -q | ||
# Change the shebangs if necessary | |||
# You might need to use a different regex depending on the project | |||
find -name '*.py' | xargs sed -i '1s|^#!python|#!%{__python_default}|' | |||
%build | %build | ||
# | |||
# Use the default Python interpreter | |||
%{__python_default} setup.py build | %{__python_default} setup.py build | ||
%install | %install | ||
# | |||
# Use the default Python interpreter | |||
%{__python_default} setup.py install --skip-build --root %{buildroot} | %{__python_default} setup.py install --skip-build --root %{buildroot} | ||
Line 71: | Line 76: | ||
%doc README.rst LICENSE | %doc README.rst LICENSE | ||
%{_bindir}/%{name} | %{_bindir}/%{name} | ||
# Files will end up in proper locations | # Files will end up in proper locations | ||
%{python_default_sitelib}/%{name} | %{python_default_sitelib}/%{name} | ||
Line 79: | Line 85: | ||
</pre> | </pre> | ||
This package will use Python 3 (or 2) on Fedora releases where Python 3 (or 2) is the default. | This package will use Python 3 (or 2) on Fedora releases where Python 3 (or 2) is the default without unnecessary if/else bloat. Useful when you build RPMs for multiple targets from one spec - for example on Copr. |
Latest revision as of 19:59, 17 October 2014
Default Python version macros
For situations when an application (i.e. not a library) is compatible with both Python 3 and Python 2, the default Python version should be used. Depending on Fedora release number the default Python version might differ. For packagers' convenience and better spec readability, the following set of macros is provided:
Macro | Fedora >= 22 | Fedora <= 21 |
---|---|---|
python_default_version | 3 | 2 |
__python_default | %{__python3} | %{__python2} |
python_default_sitelib | %{python3_sitelib} | %{python2_sitelib} |
python_default_sitearch | %{python3_sitearch} | %{python2_sitearch} |
python_default_devel | python3-devel | python2-devel |
python_default_prefix | python3- | python- |
python_default_prefix_only3 | python3- | (empty string) |
Note: The Fedora release since when Python 3 is the default might change.
Example spec file using this approach:
Name: fooapp Version: 1.0.0 Release: 1%{?dist} Summary: This is just an example License: MIT URL: http://example.com/ Source0: http://pypi.python.org/packages/source/f/%{name}/%{name}-%{version}.tar.gz BuildArch: noarch # python3-devel or python2-devel BuildRequires: %{python_default_devel} # python3-setuptools or python-setuptools BuildRequires: %{python_default_prefix}setuptools # python3-pytest or pytest BuildRequires: %{python_default_prefix_only3}pytest # Unfortunately with weird package names, we have to do if/else %if %{python_default_version} > 2 BuildRequires: python3-cairo Requires: python3-cairo %else BuildRequires: pycairo Requires: pycairo %endif %description This is just an example %prep %setup -q # Change the shebangs if necessary # You might need to use a different regex depending on the project find -name '*.py' | xargs sed -i '1s|^#!python|#!%{__python_default}|' %build # Use the default Python interpreter %{__python_default} setup.py build %install # Use the default Python interpreter %{__python_default} setup.py install --skip-build --root %{buildroot} %files %doc README.rst LICENSE %{_bindir}/%{name} # Files will end up in proper locations %{python_default_sitelib}/%{name} %{python_default_sitelib}/%{name}-%{version}-py?.?.egg-info %changelog ...
This package will use Python 3 (or 2) on Fedora releases where Python 3 (or 2) is the default without unnecessary if/else bloat. Useful when you build RPMs for multiple targets from one spec - for example on Copr.