Ma structure de fichier ressemble à:
from functionsfile import *
Le functionsfile
a une fonction qui utilise la classe créée dans le classfile
. J'importe cette classe avec
from functionsfile import function
(j'ai aussi essayé d'importer *
).
Il suffit de tester la fonction dans le functionsfile
avec une instruction print
, il semble trouver le module de classe et utiliser le ClassName
très bien, mais lorsque j' importe cette fonction du
functionsfile
dans le script main.py
, cela me donne l'erreur:
ModuleNotFoundError: No module named 'classfile'
I essayé d'importer la fonction avec les deux:
from classfile import ClassName
et
/dir/ main.py /src/ functionsfile.py classfile.py
Je ne sais pas pourquoi cela se produit?
3 Réponses :
Il semble qu'il vous manque un fichier __init__.py . Essayez d'importer après l'avoir ajouté dans votre dossier / src /.
Essayez
/dir /src /class classfile.py functionsfile.py main.py
Il serait également préférable de changer la structure de votre répertoire.
from src.classfile import ClassName
Cela a fonctionné! Merci beaucoup! Je suppose que lors de l'importation du fichier de fonctions, les modules importés qui ne sont pas sur le sys.path ont besoin d'un chemin d'importation par rapport au fichier final utilisant la fonction.
Comme l'a dit Aquarius, vous devez créer un fichier __init__.py
vide dans le dossier src
Et essayez de l'importer sous
from src.classfile import *
Dans votre fichier main.py
J'espère que cela fonctionne pour vous: D
J'ai juste essayé d'ajouter init .py aux deux dossiers .. J'ai toujours ce problème. Je ne pensais pas que je devais le faire puisque j'ai la dernière version de python et que ce n'est plus censé être nécessaire. Quoi qu'il en soit, j'obtiens toujours l'erreur :(
Pourquoi avez-vous les autres fichiers dans un dossier séparé?
vous avez une boucle dans vos dépendances: un fichier importé d'un autre qui importe le fichier courant. Si, pour une raison quelconque, vous ne pouvez pas vous en passer, vous devez utiliser les importations locales dans la fonction qui en a besoin, mais très probablement, il vous suffit de réorganiser votre code pour éviter cette boucle.
Je ne sais pas ce que vous entendez par boucle? main.py importe depuis le fichier de fonctions qui importe depuis le fichier de classe. Cela me semble linéaire?