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 votre main.py
importe config.py
cela fonctionne parce qu'ils vivent dans le même répertoire. lorsque vous déplacez votre main.py
vers un autre emplacement comme /usr/bin
ou un autre emplacement présent dans PATH variable d'environnement, python essayez d'importer config.py
à partir de sys.path
et non à partir de votre répertoire de package. la solution est d'utiliser l'importation absolue:
from project import config
maintenant main.py
est "mobile".
une autre solution, que je préfère, utilise la création de script automatique offerte 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",
],
}
)
c'est tout.après une installation setuptools va créer un script wrapper qui est appelable du 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 le déplacer dans un répertoire bin/
. notez que setuptools place 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#automatic-script-creation
Je crois que je suis stupide, mais je ne vois pas comment cela est pertinent? Pourriez-vous élaborer? – pafcu
Je pense que j'ai mal compris votre question. avez-vous besoin d'importer '/ usr/share/config.py'? ce n'est pas un bon moyen de laisser l'utilisateur personnaliser le comportement de votre application. une meilleure solution est un fichier de configuration par utilisateur comme '$ HOME/.projectrc' peut-être une configuration globale dans'/etc/'. Si c'est votre problème, je vais corriger ma réponse. –
Oui, le problème est l'importation de config.py. Et dans la question je dis spécifiquement qu'il ne contient aucune information de configuration, il contient seulement l'implémentation pour charger les fichiers de configuration réels. C'est une partie du programme, pas un fichier de configuration ou un plugin. Pour être honnête, je ne comprends pas complètement la chose entry_points. Cela pourrait très bien être ce que je cherche, mais je trouve la documentation un peu confuse. – pafcu