Question

J'ai une simple application python où ma structure de répertoire est la suivante:

  • projet /
    • main.py
    • config.py
    • plugins /
      • plugin1
      • plugin2
      • ...

Config.py charge uniquement les fichiers de configuration, il ne contient pas d'informations de configuration en elle-même.

Je veux maintenant distribuer ce programme, et je pensais que j'utiliser setuptools de le faire. Les utilisateurs de fichiers sont censés utiliser est main.py, de sorte que l'on va clairement dans / usr / bin et le reste des fichiers aller dans / usr / share / projet.

Mais il y a un problème: il me faudrait en quelque sorte de dire main.py de chercher config.py dans le répertoire de partage. Mais je ne peux pas vraiment être sûr où exactement le répertoire de partage est depuis c'est à setuptools, droit?

Quelle est la meilleure pratique lors de la distribution des applications basées sur Python?

Était-ce utile?

La solution

setuptools installer votre package dans un endroit qui est accessible à partir de Python dire que vous pouvez l'importer:

import project

l'augmentation du problème lorsque vous faites des importations par rapport au lieu des importations en termes absolus. si vos importations de main.py config.py cela fonctionne parce qu'ils vivent dans le même répertoire. lorsque vous déplacez votre main.py à un autre endroit comme /usr/bin ou un autre emplacement présent dans PATH variable d'environnement, python essayez d'importer config.py de sys.path et non de votre paquet dir. la solution est d'utiliser l'importation absolue:

from project import config

main.py est "mobile".

Une autre solution, que je préfère, utilise la création de script automatique offert par setuptools .

au lieu d'avoir votre code dans un

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

déclaration, mettez votre code dans une fonction (principale pourrait être un bon nom):

def main():
    # put your code here

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

maintenant modifier votre 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",
        ],
    }
)

qui est tout. après une installation setuptools créer un script enveloppe qui est appelable shell et qui appelle votre fonction principale. maintenant main.py peut vivre dans votre répertoire de projet et vous n'avez plus besoin de se déplacer dans un répertoire de bin/. noter que setuptools met automatiquement ce script dans le répertoire bin/ par rapport au préfixe d'installation.

es.

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

installer votre package de projet dans

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

et votre script dans

~/.local/bin/<script_name>

alors assurez-vous que ~/.local/bin est présent dans votre PATH env.

Plus d'infos sur: http://peak.telecommunity.com/DevCenter / setuptools # automatique création de script

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top