From Fedora Project Wiki

mNo edit summary
mNo edit summary
Line 13: Line 13:


<pre>
<pre>
BuildRequires: python-pip
BuildRequires: python2-pip
BuildRequires: python-wheel
BuildRequires: python2-wheel


%if %{?with_python3}
BuildRequires: python3-pip
BuildRequires: python3-pip
BuildRequires: python3-wheel
BuildRequires: python3-wheel
%endif
</pre>
</pre>


Line 28: Line 26:


<pre>
<pre>
%{__python2} setup.py bdist_wheel
%py2_build_wheel
 
%py3_build_wheel
%if 0%{?with_python3}
pushd %{py3dir}
%{__python3} setup.py bdist_wheel
popd
%endif
</pre>
</pre>


Line 44: Line 37:


<pre>
<pre>
%py2_install_wheel dist/%{python2_wheelname}
%py3_install_wheel dist/%{python3_wheelname}
%py3_install_wheel dist/%{python3_wheelname}
%py2_install_wheel dist/%{python2_wheelname}
</pre>
</pre>



Revision as of 17:32, 17 May 2018

Python Wheels in fedora

Starting with Fedora 22, Python packages will have the option to install itself into buildroot via Python wheels.[1] Wheels are the new binary distribution format for python modules, note that as such they are not suitable for use as Source archive.

Unless you have a good reason to use this method of installation, please use the one specified in Packaging:Python. Installing with wheels currently uses a fedora-specific pip option[2] that upstream may eventually implement differently.

The text below describes the minimal specfile changes needed, if installation with wheel is desired.

BuildRequires

The package has to BuildRequire python?-pip and python?-wheel:

BuildRequires: python2-pip
BuildRequires: python2-wheel

BuildRequires: python3-pip
BuildRequires: python3-wheel

Build section

The package has to use the bdist_wheel command, which creates a wheel file in the dist directory. A minimal build section thus becomes:

%py2_build_wheel
%py3_build_wheel

Install section

Tha package has to use pip to install the newly created wheel. A minimal install section thus becomes:

%py2_install_wheel dist/%{python2_wheelname}
%py3_install_wheel dist/%{python3_wheelname}

When packaging pure python packages python?_wheelname should be defined as

%global python2_wheelname %{srcname}-%{version}-py2.py3-none-any.whl
%global python3_wheelname %python2_wheelname

For packages that include any extension modules or C libraries python?_wheelname should be defined as

%global python2_wheelname %{srcname}-%{version}-cp%{python2_version_nodots}-none-linux_%{_target_cpu}.whl
%global python3_wheelname %{srcname}-%{version}-cp%{python3_version_nodots}-none-linux_%{_target_cpu}.whl

The --strip-file-prefix option is currently downstream only modification that strips given prefix from file names in wheel RECORD.[3]

Files section

Unless covered by an already existing glob, you also need to add the following entries to the files section:

%{python2_sitelib}/%{name}-%{version}.dist-info/
%{python3_sitelib}/%{name}-%{version}.dist-info/