web-dev-qa-db-fra.com

Créer une configuration PyCharm qui exécute un module à la "python -m foo"

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?

49
Alex Flint

Dans 2018.1, il est enfin possible de spécifier le nom du module au lieu du chemin du script dans l'interface utilisateur. Il y a une liste déroulante pour le changer, à gauche du champ de saisie.

PyCharm Run Configuration

31
chugreevd

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)

41
J. R. Petrus

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:

enter image description here

30
andrewdotn

IntelliJ IDEA/PyCharm 2017

Le champ "Script" est facultatif dans les versions récentes des IDE JetBrains. En précisant -m foo.bar dans "Paramètres du script" suffit:

enter image description here

6
Anton Tarasenko

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 ...

4
Amnon Grossman