web-dev-qa-db-fra.com

Python script d'importation relative deux niveaux plus haut

J'ai eu du mal avec les importations dans mon colis pendant la dernière heure.

J'ai une structure de répertoire comme ceci:

main_package
 |
 | __init__.py
 | folder_1
 |  | __init__.py
 |  | folder_2
 |  |  | __init__.py
 |  |  | script_a.py
 |  |  | script_b.py
 |
 | folder_3
 |  | __init__.py
 |  | script_c.py

Je veux accéder au code dans script_b.py ainsi que le code de script_c.py de script_a.py. Comment puis-je faire ceci?

Si je mets un simple import script_b à l'intérieur script_a.py, quand je cours

from main_package.folder_1.folder_2 import script_b

Je rencontre un

ImportError: no module named "script_b"

Pour accéder à script_c.py, Je n'ai aucune idée. Je n'ai pas pu trouver d'informations sur l'accès aux fichiers deux niveaux plus haut, mais je sais que je peux importer des fichiers un niveau plus haut avec

from .. import some_module

Comment puis-je accéder à ces deux fichiers à partir de script_a.py?

29
Luke Taylor

Pour accéder à script_c et script_b à partir de script_a, vous utiliseriez:

from ...folder_3 import script_c
from . import script_b

Ou si vous utilisez python3, vous pouvez importer script_b à partir de script_a en utilisant simplement:

import script_b

Cependant, vous devriez probablement utiliser des importations absolues:

from mypackage.folder_3 import script_c
from mypackage.folder1.folder2 import script_b

Voir aussi: Importations absolues vs importations relatives

30
tobspr