2
votes

Erreur d'importation Python (ModuleNotFoundError) lors de l'importation d'une fonction à partir d'un module qui importe une classe d'un autre module

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 commentaires

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?


3 Réponses :


1
votes

Il semble qu'il vous manque un fichier __init__.py . Essayez d'importer après l'avoir ajouté dans votre dossier / src /.


0 commentaires

2
votes

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


1 commentaires

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.



1
votes

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


1 commentaires

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 :(