Exécuter un fichier Python avec une importation relative dans PyCharm

Avez-vous déjà essayé d'exécuter un fichier Python avec une importation relative sur PyCharm et cela n'a pas fonctionné?

TL;DR

Définissez correctement la racine des sources et ajoutez des outils externes avec les paramètres ci-dessus.

Le problème que vous souhaitez résoudre

Par exemple, créez le fichier suivant dans votre propre package appelé my_pkg.

my_pkg/foo.py


x = 42

my_pkg/bar.py


from .foo import x

if __name__ == '__main__':
    print(x)

Si j'ouvre my_pkg / bar.py avec PyCharm et que je l'exécute simplement, j'obtiens l'exception suivante.

/usr/bin/python3 /tmp/my_pkg/bar.py
Traceback (most recent call last):
  File "/tmp/my_pkg/bar.py", line 1, in <module>
    from .foo import x
ModuleNotFoundError: No module named '__main__.foo'; '__main__' is not a package

Process finished with exit code 1

Cause

La raison est expliquée en détail dans l'article ici. En conclusion, cela fonctionne bien si vous l'exécutez avec l'option -m et le nom complet du module ( my_pkg.bar).

# ERROR!!
/usr/bin/python3 /tmp/my_pkg/bar.py

# OK
cd /tmp
/usr/bin/python3 -m my_pkg.bar

En d'autres termes, vous pouvez d'une manière ou d'une autre faire fonctionner PyCharm au format d'option -m.

Solution 1. Soyez honnête avec les paramètres de modification de la configuration

Vous pouvez l'exécuter dans le format d'option -m en le définissant comme indiqué dans l'image ci-dessous. Cependant, cette méthode pose le problème très sérieux de ** devoir définir ceci chaque fois que vous voulez exécuter **.

edit_configurations.png

edit_configurations2.png

Solution 2. Utilisez des outils externes

PyCharm a une fonction pour gérer les fichiers exécutables externes, alors profitez-en. C'est un peu ennuyeux, mais l'avantage est que vous ne devez le définir qu'une seule fois et qu'il peut être utilisé dans tous les projets.

Créer de nouveaux outils externes

Allez dans Fichier → Paramètres → Outils → Outils externes dans la barre de menus pour ajouter de nouveaux outils externes.

external_tools.png

external_tools2.png

Veuillez définir la partie Paramètres de l'outil comme suit.

Paramètres de la racine des sources

Tout ce que vous avez à faire est de faire un clic droit sur le répertoire parent de my_pkg et de l'enregistrer en tant que racine des sources.

external_tools3.png

Courir

Avec bar.py ouvert, cliquez sur Outil-> Outils externes-> python -m dans la barre de menus. Si vous pouvez le faire correctement, vous réussissez. Si vous l'utilisez fréquemment, il est pratique d'attribuer une touche de raccourci.

Recommended Posts

Exécuter un fichier Python avec une importation relative dans PyCharm
Lisez le fichier en Python avec un chemin relatif depuis le programme
Exécutez python avec PyCharm (Windows)
Un mémorandum pour exécuter un script python dans un fichier bat
Travailler avec LibreOffice en Python: import
Créer un fichier binaire en Python
Exécutez un algorithme simple en Python
Comment importer des fichiers où vous le souhaitez en Python
[Note] Importation de fichiers dans le répertoire parent en Python
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Créer un fichier power simple avec Python
Exécuter l'interpréteur Python dans le script
[GPS] Créer un fichier kml avec Python
Exécutez une application Web Python avec Docker
J'ai créé un fichier de configuration avec Python
Créez des raccourcis pour exécuter des fichiers Python sur le terminal avec VScode
Un mémo organisé en renommant les noms de fichiers dans le dossier avec python
Exécutez des fichiers Python dans un conteneur Docker sur un Raspbian distant via PyCharm
Lire le fichier Python # .txt pour Python super débutant super débutant avec travail .py
Comment lire un fichier CSV avec Python 2/3
[Python] Récupérez les fichiers dans le dossier avec Python
Lire un fichier contenant des lignes brouillées en Python
Comment créer un fichier JSON en Python
Lire les données de la table dans un fichier PDF avec Python
Python> Exécuter avec des arguments d'exécution> Utiliser import argparse
Travaillez dans un environnement virtuel avec Python virtualenv.
Créer une nouvelle page en confluence avec Python
Exécutez des fichiers Python à partir de HTML en utilisant Django
Créer un fichier au format Photoshop (.psd) avec python
Créez un fichier MIDI en Python en utilisant pretty_midi
Lire ligne par ligne à partir d'un fichier avec Python
Je veux écrire dans un fichier avec Python
Ouvrir la boîte de dialogue de fichier avec l'interface graphique Python (tkinter.filedialog)
Opérations sur les fichiers en Python
Exécutez Python avec VBA
Traitement de fichiers en Python
Exécutez prepDE.py avec python3
Exécutez Blender avec python
Manipulation de fichiers avec Python
Importer tsv avec Python
Exécutez iperf avec python
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
Comment déposer Google Docs dans un dossier dans un fichier .txt avec python
Analyser une chaîne JSON écrite dans un fichier en Python
Comment convertir / restaurer une chaîne avec [] en python
Spécifiez le répertoire / sous-répertoire supérieur avec l'importation relative de Python
Créez un Slackbot simple avec un bouton interactif en python
Comment exécuter des tests avec Python unittest
Essayez d'incorporer Python dans un programme C ++ avec pybind11
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
[Python] Créez un fichier de distribution pour le programme Tkinter avec cx_Freeze
Créez un faux serveur Minecraft en Python avec Quarry
Je veux faire fonctionner un ordinateur quantique avec Python
Créer un fichier CAO 2D ".dxf" avec python [ezdxf]
Utilisez tkinter pour déplacer le code de sortie en tant que "A et prétendant être B" en python
Créez un fichier exe qui fonctionne dans un environnement Windows sans Python avec PyInstaller
Je suis resté bloqué en essayant de spécifier un chemin relatif avec relative_to () en python
Python2 / numpy> Remplacer uniquement une colonne spécifique d'un fichier par les données de colonne d'un autre fichier> numpy.c_