web-dev-qa-db-fra.com

Le module d'importation ne fonctionne pas

J'ai un projet Django (mais je pense que ce n'est pas pertinent ici) et j'essaie d'ajouter un script que j'avais auparavant. Donc, je le mets dans un sous-répertoire de mon projet, et j'ai cette structure (je sais que c'est un peu le bordel pour le moment mais ça ne restera pas exactement comme ça)

 enter image description here

De views.py je veux importer main.py (en particulier la fonction excelToXml). Après des recherches sur Internet, j’ai trouvé le code que j’ai copié dans views.py. Si je le comprenais bien, il ajoutait à la variable $ PATH le répertoire parent de first_page et bien, chaque sous-répertoire 

CURRENT = os.path.dirname(os.path.abspath(__file__))
PARENT = os.path.dirname(CURRENT)
sys.path.append(PARENT)
from ExcelToXML.main import excelToXml

J'ai également créé un fichier _INIT.PY _ ​​dans le répertoire ExcelToXML, ce fichier est laissé vide.

Cependant, même si j'ai fait tout ce que je reçois toujours cette erreur quand je lance le serveur Django

Fichier "c:\Utilisateurs\CRA\AppData\Programmes\Python\Python36-32\Lib\site\packages\Django\bin\DevisVersOpen\DevisVersOpen\urls.py", ligne 18, dans le module

depuis first_page import views

Fichier "c:\Utilisateurs\CRA\AppData\Local\Programmes\Python\Python36-32\Lib\sites-packages\Django\bin\DevisVersOpen\première_page\views.py", ligne 13, dans le module

à partir d'ExcelToXML.main import excelToXml

ModuleNotFoundError: aucun module nommé 'ExcelToXML'

Je n'ai trouvé aucune solution que je puisse comprendre sur Internet, donc je ne sais vraiment pas comment résoudre ce problème.

5
Peni

Votre structure de répertoire me laisse penser que vous devriez essayer d'importer comme ceci: 

from first_page.ExcelToXML.main import excelToXml

comme ExcelToXML se trouve sous le module first_page, il est donc considéré comme un sous-module de first_page.

5
Cédric Julien

Ok bonjour, la solution que vous avez trouvée est (je pense) un désordre, vous devriez lire la documentation officielle à ce sujet https://docs.python.org/3.6/tutorial/modules.html#packages
En bref, ajoutez simplement from .idea.main import excelToXml. Si cela ne fonctionne pas, renommez le dossier .idea en idea (sans le point) et ajoutez dans votre views.py cette ligne: from idea.main import excelToXml

0
Zcode

Cochez cette case pour plus de détails sur ce qu'est le fichier init .py À quoi sert __init__.py?

Le fichier init .py doit être présent dans tous les répertoires et sous-répertoires dont les classes doivent être visibles à l'importation. Dans votre cas, je suppose que le répertoire parent ne contient pas le fichier init .py. Ajoutez le fichier dans le répertoire parent et importez-le comme suit

importer first_page.ExcelToXML 

0
Rohith