Pregunta

Tengo una aplicación Python simple donde mi estructura de directorios es la siguiente:

  • proyecto/
    • principal.py
    • configuración.py
    • complementos/
      • complemento1
      • complemento2
      • ...

Config.py solo carga archivos de configuración, no contiene ninguna información de configuración en sí mismo.

Ahora quiero distribuir este programa y pensé en usar herramientas de configuración para hacerlo.El archivo que se espera que utilicen los usuarios es main.py, de modo que uno claramente vaya a /usr/bin y el resto de los archivos vayan a /usr/share/project.

Pero hay un problema:De alguna manera necesitaría decirle a main.py que busque config.py en el directorio compartido.Pero realmente no puedo estar seguro de dónde está exactamente el directorio compartido, ya que eso depende de las herramientas de configuración, ¿verdad?

¿Cuál es la mejor práctica al distribuir aplicaciones basadas en Python?

¿Fue útil?

Solución

setuptools instalar el paquete en una ubicación que es accesible desde pitón es decir, se puede importar:

import project

el aumento problema cuando se hace la importación relativos en lugar de importaciones en términos absolutos. si sus importaciones main.py config.py funciona debido a que viven en el mismo directorio. cuando se mueve el main.py a otra ubicación como /usr/bin u otra ubicación actual en PATH variable de entorno, pitón tratar de importar config.py de sys.path y no de su dir paquete. la solución es utilizar importación absoluta:

from project import config

ahora main.py es "móvil".

otra solución, que yo prefiero, está utilizando la creación de la escritura automática ofrecido por setuptools .

en lugar de tener su código en un

if __name__ == "__main__":
    # here all your beautiful code

declaración, ponga su código en una función (principal podría ser un buen nombre):

def main():
    # put your code here

if __name__ == "__main__":    # not needed, just in case...
    main()

Ahora modificar setup.py:

setup(
    # ...
    entry_points = {
        "console_scripts": [
            # modify script_name with the name you want use from shell
            # $ script_name [params]
            "script_name = project.main:main",
        ],
    }
)

eso es todo. después de una instalación setuptools crear un guión envoltorio que es exigible a partir de concha y que llama a su función principal. Ahora main.py puede vivir en el directorio del proyecto y que no necesita más para moverse en un directorio bin/. en cuenta que setuptools pone automáticamente este script en el directorio bin/ en relación con el prefijo de instalación.

es.

python setup.py install --prefix ~/.local

instalar el paquete de proyectos en

~/.local/lib/python<version>/site-packages/<package_name>

y su secuencia de comandos en

~/.local/bin/<script_name>

así que asegúrese de que ~/.local/bin está presente en su PATH env.

más información en: http://peak.telecommunity.com/DevCenter / setuptools #-script-creación automática

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top