instalar - debianzing a python program para obtener un.deb
python download (2)
Acabo de probar stdeb
(vea https://pypi.python.org/pypi/stdeb ) un paquete de Python para convertir cualquier otro paquete de Python en un paquete de Debian.
Primero instalé stdeb:
apt-get install python-stdeb
Luego hice un script simple llamado myscript.py
con el siguiente contenido:
def main():
print "Hello world, says myscript!"
# wait for input from the user
raw_input()
if __name__ == ''__main__'':
main()
Es importante destacar que la estructura de su directorio debe ser:
somewhere/myscript/
setup.py
myscript/
__init__.py
myscript.py
En el archivo setup.py, haces algo como:
import os
from setuptools import setup
from nvpy import nvpy
setup(
name = "myscript",
version = "1.0",
author = "Charl P. Botha",
author_email = "[email protected]",
description = "Demo of packaging a Python script as DEB",
license = "BSD",
url = "https://github.com/cpbotha/nvpy",
packages=[''myscript''],
entry_points = {
''console_scripts'' : [''myscript = myscript.myscript:main'']
},
data_files = [
(''share/applications/'', [''vxlabs-myscript.desktop''])
],
classifiers=[
"License :: OSI Approved :: BSD License",
],
)
La directiva console_scripts
es importante, creará un script ejecutable llamado my_script
, que estará disponible en todo el sistema después de que instales el DEB resultante. Si su script usa algo como tkinter
o wxpython
y tiene una interfaz gráfica de usuario, debería usar gui_scripts
lugar de console_scripts
.
La directiva data_files
instalará un archivo de escritorio adecuado en /usr/share/applications
, para que también pueda iniciar myscript
desde su entorno de escritorio. vxlabs-myscript.desktop
tiene este aspecto:
[Desktop Entry]
Version=1.0
Type=Application
Name=myscript
Comment=Minimal stdeb example
# myscript should wait for user input at the end, else the terminal
# window will disappear immediately.
Exec=myscript
Icon=/usr/share/icons/gnome/48x48/apps/file-manager.png
Categories=Utility;
# desktop should run this in a terminal application
Terminal=true
StartupNotify=true
StartupWMClass=myscript
Para construir el DEB, haga lo siguiente en el myscript
nivel myscript
:
python setup.py --command-packages=stdeb.command bdist_deb
Lo que creará un .deb en el directorio deb_dist.
Después de instalar el DEB que creé así, pude ejecutar myscript
desde la línea de comandos y también podría invocarlo desde mi entorno de escritorio.
Aquí hay un repositorio de github con el código de ejemplo anterior: https://github.com/cpbotha/stdeb-minimal-example
Esta pregunta ya tiene una respuesta aquí:
objetivo
Para crear un archivo .deb
instalable (o paquete). Cuando se hacía clic, se instalaría el software en una máquina Linux y se colocaría un icono en el panel de GNOME. Para poder lanzar esta aplicación desde allí.
A lo que me he referido
Me referí a dos guías de debianización.
El primero tenía un video que era imposible de entender, en parte debido al acento y en parte porque estaba totalmente obsoleto (se subió en 2007).
Y el segundo fue completamente texto. Tengo hasta el cuarto paso, construye el paquete. Pero cuando lo hice obtuve una salida que no coincidía con lo que se daba en la guía.
Lo que requiero
Tengo un programa simple de python. Toma su edad y luego vuelve a imprimir si la edad es inferior, igual o superior a 18 años. Solo hay un archivo y ninguna otra dependencia para este programa. Y quiero construir esto en un .deb
.
Especificaciones
-Python 2.7
-Linux Mint
Editar
Seguí la estructura exacta del directorio como usted lo instruyó. Y reemplazó todo mi myscript
por cowsandbulls
. La compilación se completó y obtuve el debian. Cuando lo instalé y luego ejecuté el comando cowsandbulls
desde el terminal, recibí el siguiente error:
Traceback (most recent call last):
File "/usr/bin/cowsandbulls", line 9, in <module>
load_entry_point(''cowsandbulls==1.0'', ''gui_scripts'', ''cowsandbulls'')()
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 337, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2311, in load_entry_point
return ep.load()
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2017, in load
entry = __import__(self.module_name, globals(),globals(), [''__name__''])
ImportError: No module named cowsandbulls
La forma correcta de crear un paquete deb es usando 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 binario o con cualquier tipo de script que se ejecute automáticamente sin necesidad de compilación manual (Python, Bash, Pearl, Ruby):
- Crea los archivos y 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 ubicados en /usr/bin/
se llaman directamente desde el terminal, tenga en cuenta que no agregué una extensión al script. También puedes notar 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 en ProgramName-Version/usr/share/ProgramName/all your files
y coloque solo un archivo en /usr/bin/
que llamará a sus scripts desde /usr/share/ProgramName/
Cambie todos los permisos de la carpeta a la raíz:
chown root:root -R /path/to/ProgramName-Version
Cambia 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 paquete deb! (También puede agregar los scripts post / pre inst y todo lo que desee, funciona como un paquete normal de Debian)
Aquí hay un ejemplo del archivo de control
. Solo necesita copiarlo y pegarlo en un archivo vacío llamado "control" y colocarlo 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.
Si desea compilar usando dpkg -b <folder>
puede usar este programa que hará todo con un solo comando. Si regularmente construyes paquetes, ¡es un dolor hacer todas las cosas que mencioné!
* La guía fue tomada de Basics of Debian Packages.