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 source
algo 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 --create
en el directorio para crear una debian/changelog
entrada 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
- cree una carpeta con cualquier nombre en su casa, por ejemplo: mypyscript
- Abra la carpeta y cree dos carpetas con los nombres 'DEBIAN' y 'usr'
- Abra la carpeta DEBIAN. Cree allí un archivo de texto (sin extensión) con el nombre 'control'.
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
Regrese a la carpeta llamada mypyscript. Abra 'usr'. Cree una carpeta llamada 'bin'. Abra 'bin' y pegue su archivo pythonscript allí.
- También puede realizar una entrada en el menú. Pero eso no es esencial.
- Regrese a la carpeta de inicio donde se encuentra la carpeta 'mypyscript' o cierre el explorador de archivos.
- 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 .deb
paquete 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 man
pá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.0
carpeta 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 .deb
archivo 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.0
directorio.
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 .deb
archivo, necesita tener instalados los paquetes git
, devscripts
, build-essential
, lintian
y 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.0
carpeta, cree una carpeta llamada debian
. Dentro de él, crea una carpeta llamada source
. También directamente dentro de la debian
carpeta, cree los siguientes archivos changelog
, compat
, control
, copyright
, install
y rules
. Dentro de la debian/source
carpeta, 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.0
carpeta.
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-world
programa.
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 debhelper
nivel de compatibilidad. Ver§5.2en la documentación de Debian
10
debian/control
Esto establece varios valores que las herramientas como apt
utilizan 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-world
paquete debería tener una man
pá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 pandoc
la convertiremos por nosotros.
En el directorio principal (es decir, directamente dentro de la hello-world-1.0.0
carpeta), 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/