¿Cómo creo un paquete deb para un único script en Python?

¿Cómo creo un paquete deb para un único script en Python?

Tengo un único script en Python que quiero distribuir como un paquete deb. Es unindicadorque muestra la fecha local en el panel de Unity. Yo seguícrear un paquete .deb a partir de scripts o binariospero no pude crear un paquete deb porque falla.

¿Alguien puede darme instrucciones paso a paso sobre lo que debo hacer? Hasta donde yo sé, este script depende de 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.

Respuesta1

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

Aquí está el diseño básico del paquete fuente:

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

Ejecute dch --createen el directorio para crear una debian/changelogentrada con el formato adecuado.

debian/derechos de autordeberí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/compatiblepuede ser simplemente:7

debian/reglas:

#!/usr/bin/make -f

%:
    dh $@ --with python2

Tenga en cuenta que debe haber una "pestaña" antes dh $@ --with python2, no espacios.

Nota: Python2 está en desuso. Para un solo archivo de Python, solo dh $@(sin --with python) funciona.

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/instalar:

myScript usr/bin/

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

Ahora constrúyelo condebuild --no-tgz-check

Esto creará un paquete deb funcional. Lintian lanzará algunas advertencias sobre la falta de un orig.tar.gz, pero a menos que planee crear un proyecto adecuado que haga lanzamientos de tarball, probablemente querrá ignorarlo por ahora.

Respuesta2

  1. cree una carpeta con cualquier nombre en su casa, por ejemplo: mypyscript
  2. Abra la carpeta y cree dos carpetas con los nombres 'DEBIAN' y 'usr'
  3. Abra la carpeta DEBIAN. Cree allí un archivo de texto (sin extensión) con el nombre 'control'.
  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. Regrese a la carpeta llamada mypyscript. Abra 'usr'. Cree una carpeta llamada 'bin'. Abra 'bin' y pegue su archivo pythonscript allí.

  6. También puede realizar una entrada en el menú. Pero eso no es esencial.
  7. Regrese a la carpeta de inicio donde se encuentra la carpeta 'mypyscript' o cierre el explorador de archivos.
  8. Terminal abierta. Asegúrese de que la terminal esté en la carpeta de inicio. escriba dpkg -b mypyscript. Luego presione enter. En segundos tu paquete deb está listo

nota:complete el archivo de 'control' correctamente. No utilices apóstrofes. Es sólo para indicar los nombres.

Respuesta3

Crear un .debpaquete a partir de un único script de Python 3 (actualizado en 2021)

Esta respuesta parecerá (y es) larga en comparación con las demás. Pero, a diferencia de la respuesta aceptada, funcionará para Python 3 y en 2021. Además, no genera muchas advertencias, porque incluye todos los requisitos. como una manpágina.

A continuación se explica cómo crear un paquete Debian (sí, funcionará en Ubuntu) a partir de un único script de Python 3. Primero, hagamos el guión. Será un programa simple de hola mundo. Ponle un nombre a este archivo hello-world. Ponlo dentro de una carpeta llamada hello-world-1.0.0. Coloque la hello-world-1.0.0carpeta dentro de una segunda carpeta llamada work. La estructura del directorio aquí es un poco... extraña, sin embargo. debuild(la herramienta que usamos para construir el paquete) colocará el .debarchivo en un directorio arriba de donde lo compilamos, por lo que la estructura del directorio se verá así:

De ahora en adelante, a menos que se indique lo contrario, asumiré que se encuentra en el work/hello-world-1.0.0directorio.

work/
├─ hello-world-1.0.0/
│  ├─ hello-world

Tenga en cuenta que utilicé un guión en el nombre del archivo, no un guión bajo, ya que Debian no quiere guiones bajos en los nombres de los paquetes. También omití la extensión del archivo, lo cual está bien porque agregué un shebang en la parte superior de mi script.

Aquí está el script de Python que usaré como ejemplo. Como se mencionó anteriormente, tiene nombre hello-world(sin extensión de archivo).

#!/usr/bin/env python3
def hello_world():
    print("Hello world!")

if __name__ == "__main__":
    hello_world()

Veresta pregunta de desbordamiento de pilapor qué if __name__ = "__main__:"significa. El shebang está incluido segúnesta pregunta.

Primero, asegúrese de que el código funcione ejecutándolo:

$ chmod +x ./hello-world
$ ./hello-world
Hello world!

Para crear el .debarchivo, necesita tener instalados los paquetes git, devscripts, build-essential, lintiany pandoc. Soy consciente de que algunos de estos paquetes vienen preinstalados, pero también quería que esta guía funcionara en Debian, así que los incluí aquí de todos modos. Puedes instalarlos con estos comandos.

sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc

Dentro de la hello-world-1.0.0carpeta, cree una carpeta llamada debian. Dentro de él, crea una carpeta llamada source. También directamente dentro de la debiancarpeta, cree los siguientes archivos changelog, compat, control, copyright, instally rules. Dentro de la debian/sourcecarpeta, cree un archivo llamado format.

Su árbol de directorios ahora debería verse así

work/
├─ hello-world-1.0.0/
│  ├─ debian/
│  │  ├─ source/
│  │  │  ├─ format
│  │  ├─ changelog
│  │  ├─ compat
│  │  ├─ control
│  │  ├─ copyright
│  │  ├─ install
│  │  ├─ rules
│  ├─ hello-world

Ahora, para el contenido de estos archivos. Asumiré que estás directamente en la hello-world-1.0.0carpeta.

debian/source/format

Generalmente puedes ignorar esto, pero si te lo preguntas, se explica en§5.22en la documentación de Debian.

3.0 (native)

debian/changelog

Este archivo contiene el registro de cambios del hello-worldprograma.

hello-world (1.0.0) unstable; urgency=medium

    * Initial release:
 -- John Doe <[email protected]>  Sun, 28 Nov 2021 10:18:51 -0800

debian/compat

Esto establece el debhelpernivel de compatibilidad. Ver§5.2en la documentación de Debian

10

debian/control

Esto establece varios valores que las herramientas como aptutilizan para administrar el paquete. Ver§4.1en la documentación de Debian

Source: hello-world
Section: python
Maintainer: John Doe <[email protected]>
Build-Depends: debhelper (>= 7),
               python3 (>= 3.5)
Standards-Version: 4.5.1
Priority: optional

Package: hello-world
Architecture: all
Section: python
Depends: python3 (>=3.5), ${misc:Depends}
Description: A simple hello-world program to demenstrate how to package a
 Python 3 script as a deb file

debian/copyright

Este archivo contiene información sobre los derechos de autor y la licencia del código fuente. En este caso, supongo que el código estará bajo la licencia MIT. Cambie esto según sea necesario. Ver§4.2en la documentación de Debian

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/

Files: *
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

Files: debian/*
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

License: MIT-License
 MIT License
 .
 Copyright (c) 2021 John Doe
 .
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.

debian/install

Este archivo controla qué archivos se instalan y dónde para su paquete. Ver§5.11en la documentación de Debian

hello-world usr/bin/
hello-world.1 usr/share/man/man1/

debian/rules

Así es como Debian construye el paquete. Ver§4.4en la documentación de Debian. Una advertencia: al igual que otros Makefiles, use tabulaciones para sangrar. Los espacios no funcionarán.

#!/usr/bin/make -f

%:
    dh $@

Nuestro bonito hello-worldpaquete debería tener una manpágina. Pero el formato de las páginas man es complejo y difícil de leer. Entonces, en su lugar, escribiremos la página de manual en Markdown y pandocla convertiremos por nosotros.

En el directorio principal (es decir, directamente dentro de la hello-world-1.0.0carpeta), cree un archivo llamado hello-world.1.md. Coloque lo siguiente dentro del archivo:

% hello-world(1) hello-world 1.0.0
% John Doe
% November 2021

# NAME
hello-world - Prints a file until a null-character is reached

# SYNOPSIS
**hello-world** [*options*]

# DESCRIPTION
**hello-world** prints a file character-by-character until a null character is reached. The null character will not be printed

# OPTIONS

# EXAMPLES
**hello-world**
: Prints the text "Hello world!", followed by a newline, to the screen.

Construir esto y el paquete requiere algunos pasos. Entonces, hagamos un script (Bash) en su lugar. Cree un archivo llamado build. Hazlo ejecutable chmod +x ./build. Coloque lo siguiente en el archivo:

#!/usr/bin/env bash
pandoc hello-world.1.md -s -t man > hello-world.1
debuild --no-tgz-check -uc -us

Esto generará la página de manual y la almacenará en el archivo denominado hello-world.1. Luego construirá el paquete. Esto -uc -us significa que no lo firmaremos con una clave GPG, ya que es complejo. Ejecute el script ( ./build), y si todo va bien, estará el paquete generado en el directorio principal work.

Respuesta4

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

información relacionada