Mon python point d'entrée doit être exécuté comme un module (pas un script), comme dans:
python -m foo.bar
Ce qui suit ne fonctionne pas (et n'est pas censé le faire):
python foo/bar.py
Comment puis-je créer une configuration d'exécution dans pycharm qui exécute mon code en utilisant la première invocation ci-dessus?
Il existe une solution de contournement que j'utilise pour mes scripts, qui utilisent des importations relatives.
python -m invoque en fait un script appelé runpy.py qui fait partie d'une installation standard Python. Ces deux invocations sont équivalentes:
python -m my_module.a.b module_arguments
python python_lib_directory/runpy.py my_module.a.b module_arguments
Utilisez cette dernière méthode pour configurer votre configuration d'exécution/débogage:
Script: python_lib_directory/runpy.py
Paramètres de script: my_module.a.b module_arguments
Options d'interpréteur: (laisser vide, aucun -m requis)
Selon man python
, les -m
option
- m nom-module
Recherche sys.path pour le module nommé et exécute le fichier .py correspondant en tant que script.
Donc, la plupart du temps, vous pouvez simplement cliquer avec le bouton droit sur bar.py
dans la fenêtre de l'outil Projet et sélectionnez Run bar
.
Si vous avez vraiment besoin d'utiliser le -m
, puis spécifiez-la comme option d'interpréteur, avec le nom du module comme script dans la boîte de dialogue Modifier les configurations:
Dans PyCharm 2016, spécifier -m
Sans chemin de script ne fonctionne pas, car ils utilisent un script wrapper qui n'accepte pas l'argument -m
.
Voici ma solution, qui fonctionne pour les configurations d'exécution et de débogage: https://github.com/amnong/misc/tree/master/pycharm_runner
Edit: Je viens de lire le commentaire de J. R. Petrus, et ma solution est très similaire. BTW J'ai également essayé de prendre en charge les points d'entrée appropriés en utilisant pkg_resources
, Mais pour une raison quelconque, pkg_resources.load_entry_point()
n'a pas pu trouver la distribution de mon projet ...