206 votes

Je ne peux pas importer mes propres modules dans Python

J'ai du mal à comprendre comment fonctionne l'importation de modules en Python (je ne l'ai jamais fait non plus dans un autre langage).

Disons que je l'ai fait :

myapp/__init__.py
myapp/myapp/myapp.py
myapp/myapp/SomeObject.py
myapp/tests/TestCase.py

J'essaie maintenant d'obtenir quelque chose comme ça :

myapp.py
===================
from myapp import SomeObject
# stuff ...

TestCase.py
===================
from myapp import SomeObject
# some tests on SomeObject

Cependant, je fais certainement quelque chose de mal car Python ne peut pas voir que myapp est un module :

ImportError: No module named myapp

4 votes

Si les réponses à cette question expliquent comment résoudre le problème, la raison est expliquée ici : stackoverflow.com/questions/24435697/

6voto

jack yang Points 652

Dans votre premier répertoire myapp, vous pouvez ajouter un fichier setup.py et ajouter deux codes python dans setup.py.

from setuptools import setup
setup(name='myapp')

dans votre premier répertoire myapp en ligne de commande, utilisez pip install -e . pour installer le paquetage

3voto

sziraqui Points 1422

pip install sous Windows 10 s'installe par défaut dans 'Program Files/PythonXX/Lib/site-packages' qui est un répertoire nécessitant des privilèges administratifs. J'ai donc résolu mon problème en exécuter pip install en tant qu'administrateur (vous devez ouvrir l'invite de commande en tant qu'administrateur même si vous êtes connecté avec un compte administrateur). De plus, il est plus sûr d'appeler pip à partir de python.
par exemple
python -m pip install <package-name>
au lieu de
pip install <package-name>

2voto

Yilmaz Points 51

Supposons que j'écrive un module

import os
my_home_dir=os.environ['HOME'] // in windows 'HOMEPATH'
file_abs_path=os.path.join(my_home_dir,"my_module.py")

with open(file_abs_path,"w") as f:
   f.write("print('I am loaded successfully')")

import importlib
importlib.util.find_spec('my_module') ==> cannot find

nous devons indiquer à Python où chercher le module. nous devons ajouter notre chemin d'accès à la balise sys.path

 import sys
 sys.path.append(file_abs_path)

maintenant importlib.util.find_spec('my_module') les retours :

  ModuleSpec(name='my_module', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fa40143e8e0>, origin='/Users/name/my_module.py')

nous avons créé notre module, nous avons informé python de son chemin, maintenant nous devrions pouvoir l'importer

 import my_module

//I am loaded successfully

2voto

Deekshith Anand Points 21

Réponse courte :

python -m ParentPackage.Submodule

L'exécution du fichier requis via l'indicateur de module a fonctionné pour moi. Supposons que nous ayons une structure de répertoire typique comme ci-dessous :

my_project:
 | Core
    ->myScript.py
 | Utils
   ->helpers.py
 configs.py

Maintenant, si vous voulez exécuter un fichier à l'intérieur d'un répertoire, qui contient des importations d'autres modules, tout ce que vous devez faire est comme ci-dessous :

python -m Core.myscript

PS : Vous devez utiliser la notation point pour référencer les sous-modules (Fichiers/scripts que vous voulez exécuter). J'ai également utilisé python3.9+. Je n'ai donc pas eu besoin de init .py ni aucune déclaration d'appendice du chemin d'accès au système.

J'espère que cela vous aidera ! Bon codage !

0voto

astrowalker Points 442

Dans mon cas, il s'agissait d'une surprise entre Windows et Python, bien que les noms de fichiers Windows ne soient pas sensibles à la casse, l'importation Python l'est. Donc si vous avez Stuff.py vous devez importer ce nom tel quel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X