web-dev-qa-db-fra.com

Python 3 - Module introuvable

J'ai la structure de fichiers suivante ...

 > Boo
    > ---modA
    > ------__init__.py
    > ------fileAA.py
    > ---modB
    > ------__init__.py
    > ------fileBB.py

Quand à l'intérieur de fileBB.py je fais

from modA.fileAA import <something>

J'obtiens l'erreur suivante:

from modA.fileAA import <something>
ModuleNotFoundError: No module named 'modA'

Notez que le __init__.py les fichiers sont vides et utilisent Python 3.

Qu'est-ce que je manque ou fais mal ici?

8
DimSarak
main_package
├── __init__.py
├── modA
│   ├── fileAA.py
│   └── __init__.py
└── modB
    ├── fileBB.py
    └── __init__.py

Avoir un __init__.py dans le répertoire racine, puis utilisez l'importation comme

from main_package.modA.fileAA import something

Exécuter en utilisant un fichier driver dans main_package puis lancez, ça va marcher.

1
Vishnudev

Comme vous avez écrit votre code dans fileBB.py Et que vous essayez d'importer variables/fonctions/classes etc. définies dans fileAA.py, Vous devez en fait faire quelque chose comme ceci:

  • Créez d'abord un __init__.py Vide à l'intérieur Boo.

  • Essayez ensuite d'importer comme ceci:

    from ..modA.fileAA import <something>
    

Selon mon expérience avec l'écriture de packages, cela devrait fonctionner correctement.

Remarque: Veuillez commenter si cela ne fonctionne pas, je vais aider mais cela ne devrait pas se produire.

0
hygull

Il s'agit presque certainement d'un problème de PYTHONPATH d'où vous exécutez votre script. En général, cela fonctionne:

$ ls modA/
fileAA.py  __init__.py
$ cat modA/fileAA.py 
x = 1
$ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from modA.fileAA import x
>>> x
1

Vous pouvez regarder sys.path pour inspecter votre chemin.

0
keredson