web-dev-qa-db-fra.com

Importer un script depuis un répertoire parent

Comment importer un module (fichier python) résidant dans le répertoire parent?

Les deux répertoires ont un __init__.py fichier dans eux mais je ne peux toujours pas importer un fichier du répertoire parent?

Dans cette disposition de dossier, le script B tente d'importer le script A:

Folder A:
   __init__.py
   Script A:
   Folder B:
     __init__.py
     Script B(attempting to import Script A)

Le code suivant dans le script B ne fonctionne pas:

import ../scriptA.py # I get a compile error saying the "." is invalid
66
sazr

Vous n’importez pas de scripts dans Python vous importez des modules. Certains python sont des scripts que vous pouvez exécuter directement (ils effectuent un travail utile dans un module -niveau).

En général, il est préférable d'utiliser les importations absolues plutôt que les importations relatives.

toplevel_package/
├── __init__.py
├── moduleA.py
└── subpackage
    ├── __init__.py
    └── moduleB.py

Dans moduleB:

from toplevel_package import moduleA

Si vous souhaitez exécuter moduleB.py en tant que script, assurez-vous que le répertoire parent pour toplevel_package est dans votre sys.path.

65
jfs

De la docs :

from .. import scriptA

Vous pouvez le faire dans des packages, mais pas dans des scripts que vous exécutez directement. À partir du lien ci-dessus:

Notez que les importations relatives explicites et implicites sont basées sur le nom du module actuel. Comme le nom du module principal est toujours "__main__", les modules destinés à être utilisés comme module principal d'une application Python doivent toujours utiliser des importations absolues.

Si vous créez un script qui importe A.B.B, vous ne recevrez pas ValueError.

26
Rob Wouters

Si vous souhaitez exécuter le script directement, vous pouvez:

  1. Ajoutez le chemin du FolderA à la variable d'environnement (PYTHONPATH).
  2. Ajouter le chemin à sys.path dans le script.

Ensuite:

import module_you_wanted
4
capfredf