15.4. Empaquetado de RPMs de Python 3
La mayoría de los proyectos de Python utilizan Setuptools para el empaquetado, y definen la información del paquete en el archivo setup.py
. Para más información sobre el empaquetado de Setuptools, consulte la documentación de Setuptools.
También puedes empaquetar tu proyecto Python en un paquete RPM, que proporciona las siguientes ventajas en comparación con el empaquetado de Setuptools:
- Especificación de las dependencias de un paquete con otros RPM (incluso los que no son de Python)
Firma criptográfica
Con la firma criptográfica, el contenido de los paquetes RPM puede ser verificado, integrado y probado con el resto del sistema operativo.
15.4.1. Descripción del archivo SPEC para un paquete Python
Un archivo SPEC contiene instrucciones que la utilidad rpmbuild
utiliza para construir un RPM. Las instrucciones se incluyen en una serie de secciones. Un archivo SPEC tiene dos partes principales en las que se definen las secciones:
- Preámbulo (contiene una serie de metadatos que se utilizan en el cuerpo)
- Cuerpo (contiene la parte principal de las instrucciones)
Para más información sobre los archivos SPEC, consulte Empaquetado y distribución de software.
Un archivo RPM SPEC para proyectos de Python tiene algunas especificidades en comparación con los archivos RPM SPEC que no son de Python. En particular, el nombre de cualquier paquete RPM de una biblioteca de Python debe incluir siempre el prefijo que determina la versión, por ejemplo, python3
para Python 3.6 o python38
para Python 3.8.
En el siguiente archivo SPEC se muestran otros datos específicos example for the python3-detox
package. Para la descripción de estos detalles, consulte las notas debajo del ejemplo.
%global modname detox 1 Name: python3-detox 2 Version: 0.12 Release: 4%{?dist} Summary: Distributing activities of the tox tool License: MIT URL: https://pypi.io/project/detox Source0: https://pypi.io/packages/source/d/%{modname}/%{modname}-%{version}.tar.gz BuildArch: noarch BuildRequires: python36-devel 3 BuildRequires: python3-setuptools BuildRequires: python36-rpm-macros BuildRequires: python3-six BuildRequires: python3-tox BuildRequires: python3-py BuildRequires: python3-eventlet %?python_enable_dependency_generator 4 %description Detox is the distributed version of the tox python testing tool. It makes efficient use of multiple CPUs by running all possible activities in parallel. Detox has the same options and configuration that tox has, so after installation you can run it in the same way and with the same options that you use for tox. $ detox %prep %autosetup -n %{modname}-%{version} %build %py3_build 5 %install %py3_install %check %{__python3} setup.py test 6 %files -n python3-%{modname} %doc CHANGELOG %license LICENSE %{_bindir}/detox %{python3_sitelib}/%{modname}/ %{python3_sitelib}/%{modname}-%{version}* %changelog ...
- 1
- La macro modname contiene el nombre del proyecto Python. En este ejemplo es
detox
. - 2
- Cuando se empaqueta un proyecto Python en RPM, el prefijo
python3
siempre debe añadirse al nombre original del proyecto. El nombre original aquí esdetox
y el name of the RPM espython3-detox
. - 3
- BuildRequires especifica qué paquetes son necesarios para construir y probar este paquete. En BuildRequires, incluya siempre los elementos que proporcionan las herramientas necesarias para construir paquetes de Python:
python36-devel
ypython3-setuptools
. El paquetepython36-rpm-macros
es necesario para que los archivos con/usr/bin/python3
shebangs se cambien automáticamente a/usr/bin/python3.6
. Para más información, consulte Sección 15.4.4, “Manejo de hashbangs en scripts de Python”. - 4
- Cada paquete de Python requiere algunos otros paquetes para funcionar correctamente. Dichos paquetes deben especificarse también en el archivo SPEC. Para especificar el dependencies, puede utilizar la macro %python_enable_dependency_generator para utilizar automáticamente las dependencias definidas en el archivo
setup.py
. Si un paquete tiene dependencias que no se especifican usando Setuptools, especifíquelas dentro de las directivas adicionalesRequires
. - 5
- Las macros %py3_build y %py3_install ejecutan los comandos
setup.py build
ysetup.py install
, respectivamente, con argumentos adicionales para especificar las ubicaciones de instalación, el intérprete a utilizar y otros detalles. - 6
- La sección check proporciona una macro que ejecuta la versión correcta de Python. La macro %{__python3} contiene una ruta para el intérprete de Python 3, por ejemplo
/usr/bin/python3
. Recomendamos utilizar siempre la macro en lugar de una ruta literal.