2012-02-07 12 views
8

Estoy trabajando en el empaquetado de algunas bibliotecas en una deb con distutils.Despliegue de módulos de Python en un sistema Ubuntu con distutils y deb

Probablemente, necesito tener setup.py configurado correctamente, así como los archivos apropiados /debian para el deb.

En este momento, el repositorio se ve algo como esto:

library_name/ 
__init__.py 
liba.py 
libb.py 
... 

Se trata de ser añadido como una dependencia de otros programas para que puedan ejecutar from library_name import liba.

Googling revela algo entre 3 y 5 métodos diferentes de implementación en Ubuntu, sin incluir el enfoque easy_install; la documentación parece estar en gran parte en pedazos y desactualizada.

En particular, quiero asegurarme de que, independientemente de la versión de Python, la biblioteca se coloque en el directorio correcto del sistema. También, por supuesto, que se puede desinstalar o actualizar sin problemas.

El final del juego es tener un Deb en un servidor local que se agrega como una dependencia de paquete para nuestros otros programas.

¿Cuál es la forma canónica "fácil y directa" de hacer esto?

+0

Está su paquete compatible tanto con 2.xy 3.x? Es decir, ¿estás apuntando a ambos? – nfirvine

+0

@nfirvine: 2.6 + 2.7 –

Respuesta

2

Puede usar pkgme para crear los archivos Debian bastante rápido. Hasta donde yo sé, a diferencia de otras herramientas similares como dh-make, pkgme el diseño se basa en complementos, lo que significa que cuando se detecta Python, la información de su archivo setup.py se extrae correctamente.

Para obtener más información, puede echar un vistazo a este recent talk en el evento Ubuntu Developer Week.

2

He luchado antes con los paquetes de Python para Ubuntu/Debian, y estoy de acuerdo, los documentos son un desastre/inexistentes/engañosos: realmente necesitan una guía de inicio rápido para la situación más simple posible.

Bueno, aquí está!

Instale sus herramientas. Esto podría ser una exageración, sin embargo:

sudo apt-get install build-essential python-all dh-make devscripts fakeroot 

de inicio con su código desprotegido en un directorio llamado $packagename-$version, como library_name-0.6.0/ y cd a ese directorio. Ejecute algo como dh_make -i -c gpl3 -e [email protected] (vea dh_make --help para otras opciones). Si todo va bien, no obtendrá errores y creará una carga de archivos en ./debian. Puede ignorar o eliminar ./debian/*.{ex,EX}; esos son solo ejemplos.

probablemente debería examinar todos estos archivos en algún momento, pero por lo menos, que necesidad de editar ./debian/control y ./debian/rules. Debe completar todos los campos de templa en control, a saber, Description y Homepage.Cambie la línea Package a python-$libname cambiar su línea Depends en control a esto:

Depends: ${misc:Depends}, ${python:Depends} 

Asegura que nuestro paquete binario python-$libname depende de las versiones de Python que necesita. (${python:Depends} is a "substvar"; they're created when we build; you can inspect their values after your first build in./Debian/$ packagename.substvars`.)

cambio en la línea de rulesdh [email protected] a dh [email protected] --with python2, la preservación de la pestaña en la parte delantera (se trata de un Makefile). Esto hace que debhelper use su complemento python2; el valor predeterminado sigue siendo usar pysupport (que está en desuso, ¿recuerdas?).

A continuación, ejecute el siguiente comando en la raíz fuente:

debuild -us -uc 

Esto construye el paquete, sin la firma del mismo (algo que debe aprender a hacerlo más tarde!). Debería ver algunas líneas de herramientas de configuración familiares (dos veces: una para 2.6, una para 2.7), pilas de dh_ addons y otras construcciones. Al final está la salida de lintian, que puede detectar algunos problemas comunes de empaquetado; deberías arreglar esto Muchas de las cosas de las que lintian y amigos se quejan son solo cumplir con las reglas de empaquetado, y si tu lib es solo interna, siéntete libre de jugarlo sin problemas.

Por cierto, This page talks about the deprecation of python-support and python-central

Cuestiones relacionadas