¿Cómo creo un paquete deb para un solo script de Python?

78

Tengo un solo script de Python que quiero distribuir como un paquete deb. Es un indicador que muestra la fecha local en el panel de Unity. Seguí crear un paquete .deb a partir de scripts o binarios, pero no pude crear un paquete deb porque falla.

¿Alguien puede darme una instrucción paso a paso sobre lo que debo hacer? Hasta donde yo sé, este script depende python-appindicator.

NOTA:
No quiero ningún enlace a las instrucciones de empaquetado de Debian / Ubuntu. He visto la mayoría de ellos. No los encuentro amigables para principiantes.

sagarchalise
fuente
66
Si bien las instrucciones de empaquetado de Debian y Ubuntu no son amigables para principiantes (confía en mí, lo sé), muchas aplicaciones GUI que crean debs para ti solo generan un montón de errores cuando ejecutas un verificador de paquete final, como lintian. Si te tomas en serio el empaque, entonces la mejor manera de hacerlo es seguir las instrucciones y seguirlas :)
Thomas Boxley
No sé sobre empaquetado, pero la funcionalidad que está tratando de agregar está integrada en Unity.
Es Willem el

Respuestas:

84

Lo que sigue es un ejemplo básico de cómo se vería un paquete fuente para un script python. Si bien la mayoría de los tutoriales de empaquetado son un poco complejos, realmente pueden ayudarlo si encuentra un problema. Dicho esto, aprendí por primera vez los conceptos básicos del empaquetado de Debian simplemente mirando los paquetes de Debian. apt-get sourcealgo similar y aprender con el ejemplo.

Aquí está su diseño de paquete fuente básico:

my-script/
    -- myScript
    -- debian/
        -- changelog
        -- copyright
        -- compat
        -- rules
        -- control
        -- install

Ejecútelo dch --createen el directorio para crear una debian/changelogentrada con el formato correcto.

debian / copyright debería verse así:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: myScript
Upstream-Contact: Name, <email@address>

Files: *
Copyright: 2011, Name, <email@address>
License: (GPL-2+ | LGPL-2 | GPL-3 | whatever)
 Full text of licence.
 .
 Unless there is a it can be found in /usr/share/common-licenses

debian / compat solo puede ser:7

debian / reglas :

#!/usr/bin/make -f

%:
    dh $@ --with python2

Tenga en cuenta que debe haber "tabulación" antes dh $@ --with python2, no espacios.

debian / control :

Source: my-script
Section: python
Priority: optional
Maintainer: Name, <email@address>
Build-Depends: debhelper (>= 7),
               python (>= 2.6.6-3~)
Standards-Version: 3.9.2
X-Python-Version: >= 2.6


Package: my-script
Architecture: all
Section: python
Depends: python-appindicator, ${misc:Depends}, ${python:Depends}
Description: short description
 A long description goes here.
 .
 It can contain multiple paragraphs

debian / install :

myScript usr/bin/

Este archivo indica qué archivo se instalará en qué carpeta.

Ahora construyelo con debuild --no-tgz-check

Esto creará un paquete de deb funcional. Lintian lanzará algunas advertencias con respecto a la falta de un orig.tar.gz, pero a menos que planee crear un proyecto ascendente adecuado que haga lanzamientos de tarball, probablemente solo quiera ignorar eso por ahora.

andrewsomething
fuente
12
Como empaquetador (y backporter), empaqueto scripts de Python con bastante frecuencia. Puedo decir con seguridad que esta respuesta aquí es la explicación más completa de qué hacer para crear un paquete para un solo script de Python.
Thomas Ward
2
¿Podrías actualizarlo también para Python 3? Supongo que necesitamos hacer cambios en debian/rulesy debian/control, pero no estoy seguro de eso.
Aditya
1
@Aditya, ¿quizás haya una nueva pregunta para Python3? La respuesta no sería muy diferente, pero esta apunta a ser el ejemplo mínimo más simple / simple de cómo empaquetar un script Python. No estoy seguro de querer saturarlo con múltiples implementaciones.
andrewsomething
@andrewsomething: Entonces puede que te interese este que me llevó a dejar ese comentario ... Se requiere un poco de edición en ese, intentaría probarlo ...
Aditya
1
¿Qué hay de las bibliotecas? Si el script python importa bibliotecas, entonces no funcionará
D.Snap
18
  1. cree una carpeta con cualquier nombre en su hogar, por ejemplo: mypyscript
  2. Abra la carpeta y cree dos carpetas con los nombres 'DEBIAN' y 'usr'
  3. Abra la carpeta DEBIAN. Cree un archivo de texto (sin extensión) con el nombre 'control' allí.
  4. Abra 'control' y escriba lo siguiente y guárdelo en DEBIAN

    Package: mypyscript
    Version: 0.01
    Architecture: all
    Maintainer: your name<your mail id>
    Installed-Size: 2
    Depends: python-appindicator
    Section: extras
    Priority: optional
    Homepage: your homepage
    Description: describe
  5. Volver a la carpeta llamada mypyscript. Abra 'usr'. Cree una carpeta llamada 'bin'. Abra 'bin' y pegue su archivo pythonscript allí.

  6. También puede hacer una entrada de menú. Pero eso no es esencial.
  7. Vuelva a la carpeta de inicio donde se encuentra la carpeta 'mypyscript' o cierre el explorador de archivos.
  8. Terminal abierto Asegúrese de que el terminal esté en la carpeta de inicio. escriba. dpkg -b mypyscriptLuego presione Intro. En segundos su paquete de Deb está listo

nota: complete el archivo de 'control' correctamente. No uses apóstrofes. Es solo para indicar los nombres.

ST Alfas
fuente
1
¡Funciona genial! La respuesta aceptada es compleja.
SuB
No olvide cambiar el permiso de 'myscript' a 755 y el propietario del mismo a root.
SuB
¿Cómo creo una entrada de menú?
Para hacer el
9

Puede probar con Debreate , una herramienta GUI para crear paquetes.

davidc3
fuente
Debcreate es genial. Hasta ahora me gusta, comencé a usarlo hoy para construir desde el código fuente de Python.
answerSeeker
3

Lo verificaría rápidamente, ideal para crear aplicaciones rápidas y generar debs en Google o puede encontrar tutoriales aquí http://developer.ubuntu.com/

Oly
fuente
Sí, también me gusta agregar. wiki.ubuntu.com/Quickly , si prefieres videos como yo, youtube es un gran recurso
Jiew Meng
Rápidamente no puede simplemente convertir un paquete en paquete .deb
Archisman Panigrahi
2

Prueba pkgme . Se supone que solo funciona.

Instalar a través de:

sudo apt install pkgme

Ejecutar a través de:

pkgme
debuild

(Es posible que un nuevo desarrollador tenga que ejecutarse gpg --gen-key, consulte Desarrollo de claves de desarrollo para hacerlo correctamente)

ams
fuente
0

Puedes intentar usar Debreate

Esta es una interfaz Gui para crear paquetes y cosas que también puede usar el PPA si no desea descargarlo del sitio web que se menciona arriba.

sudo add-apt-repository ppa:antumdeluge/<ppaname>; sudo apt update; sudo apt install debreate

¡He condensado el ppa para que se ejecute como una sola línea de código! ¡Gracias por la increíble pregunta y asegúrese de seguir cortando esas líneas de código en la terminal!

Galien1
fuente