web-dev-qa-db-fra.com

Importer depuis le répertoire frère

J'ai une classe Python appelée "ClassA" et une autre classe Python qui est censée importer ClassA qui est "ClassB". La structure du répertoire est la suivante:

MainDir
../Dir
..../DirA/ClassA
..../DirB/ClassB

Comment pourrais-je utiliser sys.path pour que ClassB puisse utiliser ClassA?

32
skylerl

Vous devriez vraiment utiliser des packages. Ensuite, MainDir est placé à un point du système de fichiers sur sys.path (par exemple .../site-packages), puis vous pouvez dire dans ClassB:

from MainDir.Dir.DirA import ClassA # which is actually a module

Il vous suffit de placer des fichiers nommés __init__.py dans chaque répertoire pour en faire une hiérarchie de packages.

17
Keith

comme réponse littérale à la question "Importation Python depuis le répertoire parent':

pour importer 'mymodule' qui se trouve dans le répertoire parent de votre module actuel:

import os
parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.sys.path.insert(0,parentdir) 
import mymodule

éditer Malheureusement, le __file__ l'attribut n'est pas toujours défini. Un moyen plus sûr d'obtenir le répertoire parent est via le module d'inspection:

import inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
47
Remi

Vous pouvez utiliser importation relative (exemple du lien, module actuel - A.B.C):

from . import D                 # Imports A.B.D
from .. import E                # Imports A.E
from ..F import G               # Imports A.F.G
25
crazylammer