web-dev-qa-db-fra.com

Comment importer un fichier python situé dans le même sous-répertoire dans un projet pycharm

J'ai une erreur de saisie dans pycharm lors du débogage et de l'exécution.

Ma structure de projet est correctement enracinée, etc./HW3/., de sorte que HW3 est le répertoire racine. 

J'ai un sous-dossier dans HW3, util, et un fichier, util/util.py. J'ai un autre fichier dans util appelé run_tests.py

Dans run_tests.py, j'ai la structure d'importation suivante, 

from util.util import my_functions, etc.

Cela génère une erreur de saisie, from util.util import load_dataset,proportionate_sample ImportError: No module named 'util.util'; 'util' is not a package


Cependant, dans le même projet, dans un autre répertoire (au même niveau que util) appelé data, j'ai un fichier data/data_prep.py, qui importe également des fonctions de util/util.py en utilisant une instruction d'importation similaire ... et il s'exécute sans aucun problème. 


Évidemment, je le fais dans le cadre d'un devoir, alors comprenez bien: ceci est accessoire à la portée du devoir. 


Le problème disparaît lorsque je déplace le fichier dans un autre répertoire. Donc, je suppose que cette question est Comment importer un fichier Python situé dans le même répertoire d’un projet pycharm? Parce que pycharm génère une erreur si je ne fais que import util et me demande d’utiliser le nom complet à partir de la racine. 

19
bordeo

Si vous n'avez pas de __init__.py, créez-en un et ajoutez cette ligne 

from util.util import my_function

alors vous pouvez facilement importer le module dans vos scripts le __init__.py indique à python qu'il doit traiter ce dossier comme un paquet python, il peut également être utilisé pour importer/charger des modules.

dans la plupart des cas, le __init__.py est vide.

Citer les docs

Les fichiers __init__.py sont requis pour que Python traite le fichier les répertoires contenant des paquets; ceci est fait pour empêcher répertoires avec un nom commun, tel que chaîne, de manière non intentionnelle masquer les modules valides qui se produisent plus tard sur le chemin de recherche de module. Dans Dans le cas le plus simple, __init__.py peut simplement être un fichier vide, mais il peut exécutez également le code d’initialisation du package ou définissez le __all __ variable, décrite plus tard.

8
danidee

Manière recommandée:

Assurez-vous de définir le dossier de travail sur Sources

Vous pouvez le faire dans Pycharm->Preferences->Project: XYZ->Project Structure

Sélectionnez votre dossier de travail et marquez-le en tant que Sources. Pycharm reconnaît ensuite le dossier de travail en tant que dossier source du projet et vous pourrez simplement ajouter d’autres fichiers dans ce dossier à l’aide de 

import filename.py

ou

from filename.py import mudule1

==================

Manière non recommandée:

Dans Pycharmvous pouvez simplement ajouter . avant le fichier .py que vous allez importer depuis le dossier same. Dans votre cas ce sera

from .util import my_functions
33
imanzabet

Note: Peut-être un peu sans rapport.

J'étais confronté au même problème mais je ne pouvais pas importer un module dans le même répertoire (plutôt que dans le sous-répertoire demandé par l'OP) lors de l'exécution d'un jupyter notebook (ici le répertoire n'avait pas __init__.py). Étrangement, j'avais le chemin d'installation en python et l'emplacement de l'interprète, etc. Aucune des autres réponses n'a aidé, mais changer le répertoire en python l'a fait. 

import os
os.chdir(/path/to/your/directory/)

J'utilise PyCharm 2017.3 sur Ubuntu 16.04

1
imsrgadich

Le même problème se posait avec pycharm, mais l’erreur réelle était que le fichier que j’essayais d’importer n’avait pas d’extension .py, même si j’ai pu l’exécuter en tant que script autonome. Regardez dans la fenêtre de l’explorateur et assurez-vous qu’il porte une extension .py. Sinon, cliquez avec le bouton droit sur le fichier dans la fenêtre de l'Explorateur, choisissez refactor, puis renommez-le avec une extension .py.

1
Odysseus Ithaca