Construir un paquete debian con script python

Tener un directorio

root
-setup.py

src/
  -app.py (with main function)

con configuración. py

from setuptools import setup


setup(
    name="testing_python_package",
    version=1.0,
    author="Lee",
    description="testing python stuff for deb package",
    packages=["src"],
    entry_points={"console_scripts": ["pytesting=src.app:main"]},
)

mi objetivo es crear un paquete deb que puedo instalar en otro lugar por ejemplo (o la misma máquina con dpkg). Lea algunas cosas al respecto e instale todas las cosas necesarias. Entonces usé el comando

sudo python3 setup.py --command-packages=stdeb.command bdist_deb

para crear paquetes fuente y binarios pero no estoy viendo ningún archivo .deb y conseguir esta salida + error:

running bdist_deb
running sdist_dsc
running egg_info
writing testing_python_package.egg-info/PKG-INFO
writing dependency_links to testing_python_package.egg-info/dependency_links.txt
writing entry points to testing_python_package.egg-info/entry_points.txt
writing top-level names to testing_python_package.egg-info/top_level.txt
reading manifest file 'testing_python_package.egg-info/SOURCES.txt'
writing manifest file 'testing_python_package.egg-info/SOURCES.txt'
running sdist
warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md

running check
warning: check: missing required meta-data: url

warning: check: missing meta-data: if 'author' supplied, 'author_email' must be supplied too

creating testing_python_package-1.0
creating testing_python_package-1.0/src
creating testing_python_package-1.0/testing_python_package.egg-info
copying files to testing_python_package-1.0...
copying setup.py -> testing_python_package-1.0
copying src/__init__.py -> testing_python_package-1.0/src
copying src/app.py -> testing_python_package-1.0/src
copying testing_python_package.egg-info/PKG-INFO -> testing_python_package-1.0/testing_python_package.egg-info
copying testing_python_package.egg-info/SOURCES.txt -> testing_python_package-1.0/testing_python_package.egg-info
copying testing_python_package.egg-info/dependency_links.txt -> testing_python_package-1.0/testing_python_package.egg-info
copying testing_python_package.egg-info/entry_points.txt -> testing_python_package-1.0/testing_python_package.egg-info
copying testing_python_package.egg-info/top_level.txt -> testing_python_package-1.0/testing_python_package.egg-info
Writing testing_python_package-1.0/setup.cfg
Creating tar archive
removing 'testing_python_package-1.0' (and everything under it)
dpkg-buildpackage: source package testing-python-package
dpkg-buildpackage: source version 1.0-1
dpkg-buildpackage: source distribution unstable
dpkg-buildpackage: source changed by unknown 
 dpkg-source --before-build testing-python-package-1.0
dpkg-source: info: using options from testing-python-package-1.0/debian/source/options: --extend-diff-ignore=\.egg-info$
dpkg-checkbuilddeps: error: Unmet build dependencies: build-essential:native
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
Traceback (most recent call last):
  File "setup.py", line 10, in 
    entry_points={"console_scripts": ["pytesting=src.app:main"]}
  File "/home/USER/.local/lib/python3.6/site-packages/setuptools/__init__.py", line 144, in setup
    return distutils.core.setup(**attrs)
  File "/usr/lib/python3.6/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/lib/python3.6/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/home/USER/.local/lib/python3.6/site-packages/stdeb/command/bdist_deb.py", line 34, in run
    self.run_command('sdist_dsc')
  File "/usr/lib/python3.6/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/usr/lib/python3.6/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/home/USER/.local/lib/python3.6/site-packages/stdeb/command/sdist_dsc.py", line 144, in run
    ignore_source_changes=self.ignore_source_changes,
  File "/home/USER/.local/lib/python3.6/site-packages/stdeb/util.py", line 1569, in build_dsc
    dpkg_buildpackage(*args, cwd=fullpath_repackaged_dirname)
  File "/home/USER/.local/lib/python3.6/site-packages/stdeb/util.py", line 585, in dpkg_buildpackage
    process_command(args, cwd=cwd)
  File "/home/USER/.local/lib/python3.6/site-packages/stdeb/util.py", line 226, in process_command
    check_call(args, cwd=cwd)
  File "/home/USER/.local/lib/python3.6/site-packages/stdeb/util.py", line 59, in check_call
    raise CalledProcessError(retcode)
stdeb.util.CalledProcessError: 3

¿Qué estoy haciendo mal?

¡Gracias!

usó esto como fuente: ¿Hay una manera estándar de crear paquetes Debian para distribuir programas Python?

Pregunta hecha hace 3 años, 4 meses, 28 días - Por nodenomad


2 Respuestas:

  • El error que estás experimentando se debe a que el comando sudo python3 setup.py --command-packages=stdeb.command bdist_deb no está generando el paquete .deb correctamente debido a algunas dependencias faltantes y errores en la configuración.

    Aquí hay algunas correcciones que puedes hacer para solucionar este problema:

    • Agrega las siguientes dependencias faltantes a tu sistema:
    <pre><code>bash
    sudo apt-get install build-essential
    </code></pre>
    
    Esta instalación resolverá el error de unmet build dependencies en el mensaje de error que recibiste.
    
    • Modifica el archivo `setup.py` para corregir los errores en la configuración. Asegúrate de que tu archivo `setup.py` se vea así:
    <pre><code>python
    from setuptools import setup
    
    setup(
        name="testing_python_package",
        version="1.0",
        author="Lee",
        description="testing python stuff for deb package",
        packages=["src"],
        entry_points={
            "console_scripts": [
                "pytesting=src.app:main"
            ]
        },
    )
    </code></pre>
    

    Con estas correcciones, deberías poder generar el paquete .deb correctamente utilizando el comando sudo python3 setup.py --command-packages=stdeb.command bdist_deb. Una vez generado, podrás instalar el paquete .deb en tu sistema con dpkg. ¡Espero que esta información sea útil y resuelva tu problema!

    Respondida el Dec 18, 2020 a las 16:56 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Puedo ayudarte a solucionar el problema que estás experimentando al crear un paquete debian con un script de Python. Veamos los siguientes pasos para resolver el problema:

    • Dependencias faltantes: El error menciona que faltan dependencias de compilación para `build-essential`:
    
    dpkg-buildpackage: error: Unmet build dependencies: build-essential:native
    

    Instala las dependencias faltantes ejecutando:

    
    sudo apt install build-essential
    
    • Metadatos faltantes: El error también indica que faltan metadatos como `url` y `author_email` en tu configuración.

    Agrega la siguiente información a tu setup.py:

    python
    setup(
        name="testing_python_package",
        version=1.0,
        author="Lee",
        author_email="[email protected]",
        url="https://example.com/testing-python-package",
        description="testing python stuff for deb package",
        packages=["src"],
        entry_points={"console_scripts": ["pytesting=src.app:main"]},
    )
    
    • Falta de archivo README: El error también menciona que falta un archivo README estándar. Crea un archivo `README.md` en el directorio raíz de tu proyecto con alguna información básica sobre tu paquete.
    • Ejecuta nuevamente el comando: Después de hacer estas correcciones, vuelve a ejecutar el comando:
    
    sudo python3 setup.py --command-packages=stdeb.command bdist_deb
    
    • Comprueba los archivos DEB: Una vez que el comando se ejecute correctamente, deberías ver archivos .deb en el directorio `dist/`. Instala el paquete deb usando:
    
    sudo dpkg -i path/to/deb_file.deb
    

    Nota adicional:

    Asegúrate de tener instalados los paquetes necesarios para crear paquetes deb, como dpkg-dev y devscripts. Puedes personalizar el proceso de creación de paquetes modificando el archivo debian/control en el directorio debian generado. * Para más información, consulta la documentación de stdeb.

    Respondida el Dec 18, 2020 a las 17:01 - por Gemini

    Votos positivos: 0 | Votos negativos: 0