que - instalar librerias python en ubuntu
¿Forma estándar de crear paquetes Debian para distribuir programas Python? (4)
Hay muchísima información sobre cómo hacer esto, pero dado que "hay más de una manera de despellejar a un gato" , y todos los tutoriales / manuales que cubren un poco del proceso parecen hacer ciertas suposiciones que son diferentes de otras. tutoriales, todavía no logré entenderlo.
Hasta ahora esto es lo que creo que entendí.
- Mi objetivo final debería ser crear un paquete .deb "binario". Tal paquete será independiente de la plataforma (32/64 bit) ya que todos los programas de Python son tales.
- Para crear un paquete "binario", primero necesito crear un paquete fuente.
- Para crear el paquete fuente, puedo usar
CDBS
odebhelper
. Debhelper es la forma recomendada para principiantes. - El núcleo de la creación de un paquete fuente está poblando el directorio DEBIAN en el directorio fuente con una serie de archivos que aclaran dónde se deben copiar los archivos, qué esquema de derechos de autor y licencias están sujetos, qué dependencias tienen, etc.
- El paso # 4 se puede automatizar en gran medida el comando
dh_make
si el origen de python también viene con una secuencia de comandos setup.py desetup.py
.
Ahora mis preguntas:
- ¿Es correcto mi entendimiento del proceso? ¿Hay algo que me falta, o algo que me haya pasado mal?
- El paso # 5 es realmente el más confuso para mí: específicamente, los dos puntos que me resultan más oscuros son:
- ¿Cómo escribo un script
setup.py
que instala un programa independiente? EDITAR: Por programa independiente me refiero a un programa destinado a ser utilizado por un usuario de escritorio (a diferencia de un módulo que entiendo como una colección de funcionalidad para ser utilizado por otro software después de haber sido importado). En mi caso específico, realmente necesitaría dos de esos "programas": el software principal y una utilidad separada (en efecto, un segundo "programa" que debería estar en el mismo paquete que el otro). - ¿Cuáles son las características específicas de tal script para los paquetes DEB? La documentación oficial solo parece tratar con RPM y Windows ...
- ¿Cómo escribo un script
Por cierto: estas son las mejores fuentes de información que podría encontrar hasta ahora. Si tienes algo mejor que esto, ¡por favor comparte! :)
- La guía de empaquetado de Python de Ubuntu
- Crear un paquete .deb desde python setup.py ( muestra los pasos pero no los explica lo suficiente como para que pueda seguirlos)
- Video de ShowMeDo sobre "crear un paquete .deb a partir de un programa python" (no parece estar actualizado y, si lo hice bien, producirá paquetes para uso personal, sin dependencias y sin un registro de cambios firmado y otros) datos clave que lo harán incompatible con la política de Debian).
Hay varias bibliotecas que abstraen todos los pasos necesarios y le permiten transformar su paquete python en un paquete Debian con un solo comando.
Suponiendo que su paquete python ya tiene el setup.py
, en el directorio donde se encuentra setup.py
, puede usar:
stdeb (ya mencionado en esta answer , instalar con
pip install stdeb
). Para crear un paquete Debian, ejecute:python setup.py --command-packages=stdeb.command bdist_deb
El archivo
.deb
salida se ubicará en el directoriobdist_deb
.fpm (instalar con
gem install --no-ri --no-rdoc fpm
). Para crear un paquete Debian, ejecute:fpm -s python -t deb setup.py
py2deb (instalar con
pip install py2deb
). Para crear un paquete Debian, ejecute:py2deb -r . .
Cada una de estas bibliotecas tiene sus propias advertencias, por lo que es posible que desee probar lo que funciona mejor para usted.
La forma correcta de compilar un paquete deb es usar dpkg-buildpackage
pero a veces es un poco complicado. En su lugar, puede usar dpkg -b <folder>
y creará su paquete Debian.
Estos son los conceptos básicos para crear un paquete Debian con dpkg -b <folder>
con cualquier tipo de script binario o con cualquier tipo de script que se ejecute automáticamente sin necesidad de compilación manual (Python, Bash, Pearl, Ruby):
- Cree los archivos y las carpetas para recrear la siguiente estructura:
ProgramName-Version/
ProgramName-Version/DEBIAN
ProgramName-Version/DEBIAN/control
ProgramName-Version/usr/
ProgramName-Version/usr/bin/
ProgramName-Version/usr/bin/your_script
Los scripts colocados en /usr/bin/
se llaman directamente desde el terminal, tenga en cuenta que no agregué una extensión al script. También puede observar que la estructura del paquete deb será la estructura del programa una vez que esté instalado. Entonces, si sigue esta lógica si su programa tiene un solo archivo, puede colocarlo directamente en ProgramName-Version/usr/bin/your_script
, pero si tiene varios archivos, debe colocarlos bajo ProgramName-Version/usr/share/ProgramName/all your files
y coloca solo un archivo en /usr/bin/
que llamará a tus scripts desde /usr/share/ProgramName/
Cambie todos los permisos de la carpeta a la raíz:
chown root:root -R /path/to/ProgramName-Version
Cambiar los permisos del script:
chmod 0755 /path/to/the/script
Finalmente, puede ejecutar:
dpkg -b /path/to/the/ProgramName-Version
y sedpkg -b /path/to/the/ProgramName-Version
su paquetedpkg -b /path/to/the/ProgramName-Version
. (También puede agregar las secuencias de comandos post / pre inst y todo lo que desee, funciona como un paquete Debian normal)
Aquí hay un ejemplo del archivo de control
. Solo necesita copiarlo y pegarlo en un archivo vacío llamado "control" y ponerlo en la carpeta DEBIAN
Package: ProgramName
Version: VERSION
Architecture: all
Maintainer: YOUR NAME <EMAIL>
Depends: python2.7, etc , etc,
Installed-Size: in_kb
Homepage: http://foo.com
Description: Here you can put a one line description. This is the short Description.
Here you put the long description, indented by 1 space.
Parece que stdeb hará lo que quieras.
Además, para instalar scripts, recomiendo distribuir el soporte de puntos de entrada console_scripts .
Este artículo de Barry Warsaw me ayudó a avanzar bastante en el proceso. Sin embargo, todavía tuve que buscar mucho por el lado, y leí la mayor parte de la guía de empaquetado de Ubuntu en el pasado.
Tener un buen setup.py
es un muy buen consejo. Encontré estas dos guías bastante buenas: