GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo empaquetar aplicaciones de Python para Linux

Una forma de hacer que las aplicaciones de Python se puedan instalar en sistemas operativos basados ​​en Debian (como Debian o Elementary OS) es mediante el uso de la herramienta dh_virtualenv. Construye un .deb paquete que envuelve un entorno virtual de Python alrededor de una aplicación y lo implementa al momento de la instalación.

En este artículo, explicaré cómo usarlo con el ejemplo de la creación de un paquete que contiene la herramienta HTTPie para probar las API HTTP desde la línea de comandos sin tener que activar un entorno virtual.

Embalaje con dh_virtualenv

Primero, debe instalar las herramientas que necesita dh_virtualenv. La documentación de dh_virtualenv proporciona todas las opciones de instalación. En mi sistema basado en Debian, ingresé:

apt-get install dh-virtualenv devscripts

Si bien no se requiere el paquete devscripts, simplificará las operaciones posteriores.

Ahora, cree un directorio para guardar las fuentes. Dado que este es un paquete local, no oficial, de HTTPie, lo llamé myhttp . A continuación, creemos algunos archivos dentro de myhttp para proporcionar metadatos al sistema de compilación de Debian.

Primero, cree el debian/control archivo:

Source: myhttp
Section: python
Priority: extra
Maintainer: Jan Doe <[email protected]>
Build-Depends: debhelper (>= 9), python3.7, dh-virtualenv (>= 0.8)
Standards-Version: 3.9.5

Package: myhttp
Architecture: any
Pre-Depends: dpkg (>= 1.16.1), python3.7, ${misc:Pre-Depends}
Depends: ${misc:Depends}
Description: http client
 Useful for doing stuff

Entonces, ¿de qué se trata toda esta información? Como dice la documentación de Debian:

"Las líneas 1 a 7 son la información de control del paquete fuente. Las líneas 9 a 13 son la información de control del paquete binario".

Esta es mi opinión:

  • la sección el valor es en su mayoría sin sentido para nuestro caso, pero debe estar allí. Es importante proporcionar información al instalador de IU guiada, que no es relevante para este paquete.
  • La prioridad adicional el valor es la prioridad correcta para paquetes de terceros como este.
  • Se recomienda poner detalles de contacto reales en el Mantenedor campo. Sin embargo, no tiene que ser su correo electrónico personal:"Equipo de infraestructura ", por ejemplo, si el equipo mantiene el paquete y desea que los problemas se solucionen. se enviará al alias de correo del equipo.
  • La construcción depende indica que necesita debhelper, python y dh-virtualenv para compilar el paquete:el proceso de compilación del paquete se asegurará de que esas dependencias se instalen en el momento de la compilación del paquete.
  • La versión estándar es mayoritariamente para el consumo humano. Indica qué guía estás siguiendo. Esta guía se basa en la documentación oficial de dh-virtualenv, que se basa en la guía 3.9.5 de Debian. Casi siempre es la mejor opción nombrar el paquete binario y el paquete fuente de la misma manera.
  • La arquitectura el campo debe ser Cualquiera porque un entorno virtual puede incluir algunos archivos específicos de la arquitectura:de lo contrario, sería mejor elegir el campo como todos .
  • Mantener las dependencias previas list as-is:pre-depends es una forma bastante estricta de dependencias, y es raro que necesite algo más que el mínimo sugerido aquí. El sistema de compilación suele calcular con precisión las dependencias, por lo que no hay razón para especificarlas manualmente.
  • Si su paquete es principalmente para uso interno, entonces la Descripción puede que solo especifique información mínima y un enlace a la wiki de la empresa; de lo contrario, más detalles podrían ser útiles.

Luego crea el debian/compat archivo, que existe principalmente para fines históricos:

$ echo "9" > debian/compat

A continuación, cree el registro de cambios para informar a los usuarios del paquete qué ha cambiado desde la última versión. La forma más fácil es usar dch --create para crear una plantilla y luego completar los valores.

Completado, se parece a:

myhttp (2.0.0-1) stable; urgency=medium

  * Initial release.

 -- Jan Doe <[email protected]>  Fri, 27 Mar 2020 01:09:22 +0000

Ahora necesita decirle a la herramienta que instale HTTPie, pero ¿qué versión?

Crear un requirements.in archivo que tiene versiones sueltas:

httpie

En general, el archivo de requisitos sueltos solo contendrá dependencias directas de su proyecto y especificará versiones mínimas si es necesario. No siempre es necesario especificar las versiones mínimas:las herramientas suelen estar sesgadas hacia el ajuste de las dependencias hacia la "última versión posible". En el caso de que su paquete Debian corresponda a un paquete interno de Python, un caso común en las aplicaciones internas, el archivo de requisitos sueltos se verá similar:solo una línea con el nombre del paquete.

Luego usa pip-compile (que está disponible instalando el paquete PyPI pip-tools ):

$ pip-compile requirements.in > requirements.txt

Esto generará un archivo de dependencia estricto llamado requirements.txt :

#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile requirements.in
#
certifi==2019.11.28       # via requests
chardet==3.0.4            # via requests
httpie==2.0.0             # via -r requirements.in
idna==2.9                 # via requests
pygments==2.6.1           # via httpie
requests==2.23.0          # via httpie
urllib3==1.25.8           # via requests

Finalmente, escriba un debian/rules archivo para crear el paquete. Dado que dh_virtualenv hace todo el trabajo duro, el archivo de reglas es simple:

#!/usr/bin/make -f

%:
        dh $@ --with python-virtualenv --python /usr/bin/python3.7

Asegúrese de especificar el intérprete de Python. De forma predeterminada, utilizará el intérprete en /usr/bin/python , que es Python 2, pero debe usar una versión compatible de Python.

La escritura está terminada; todo lo que queda es construir el paquete:

$ debuild -b -us -uc

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Esto generará un archivo en el directorio principal con un nombre como myhttp_2.0.0-1_amd64.deb . Este archivo se puede instalar en cualquier sistema operativo compatible.

En general, es mejor crear paquetes Debian destinados a una plataforma específica, como Debian 10.0, en la misma plataforma.

Puede almacenar este paquete Debian en un repositorio e instalarlo en todos los sistemas relevantes con, por ejemplo, Ansible.

Conclusión

Empaquetar aplicaciones para sistemas operativos basados ​​en Debian es un proceso de varios pasos. El uso de dh_virtualenv simplificará el proceso.


Linux
  1. Cómo instalar Python en Linux

  2. Cómo crear un directorio compartido para todos los usuarios en Linux

  3. Cómo crear un script de un comando de Linux

  4. Cómo crear un intercambio en Linux

  5. Cómo crear un usuario en linux usando python

Cómo crear accesos directos en el escritorio de Linux

Cómo crear un alias SSH en Linux

Cómo crear un alias en Linux

Cómo instalar Setuptools para Python en Linux

¿Cómo crear un paquete para la cuenta de cPanel?

Cómo crear un controlador de dominio en Linux para AD