318 votes

Comment importer une classe Python qui est dans un répertoire ci-dessus?

Je veux hériter d'une classe dans un fichier qui se trouve dans un répertoire au-dessus de l'actuel.

Est-il possible d'relativement à l'importation de ce fichier?

250voto

gimel Points 30150

À l'intérieur d'une hiérarchie de paquet, l'utilisation de deux points, comme l' instruction d'importation doc a dit:

Lors de la spécification de ce module d'import vous n'avez pas à spécifier le nom absolu du module. Lorsqu'un module ou un paquet est contenu dans un autre package, il est possible d'en faire une par rapport à l'importation dans le même package de haut sans avoir à mentionner le nom du package. En utilisant des points dans le module spécifié ou paquet après l' from vous pouvez spécifier à quelle hauteur pour traverser le paquet actuel de la hiérarchie, sans préciser de noms exacts. Un point signifie que le paquet actuel où le module de prise de l'importation existe. Deux points est-à-dire un paquet niveau. Trois points deux à deux niveaux, etc. Donc, si vous exécutez from . import mod à partir d'un module dans l' pkg forfait sera à la fin de l'importation pkg.mod. Si vous exécutez from ..subpkg2 import mod de dans les pkg.subpkg1 vous allez importer pkg.subpkg2.mod. La spécification relative des importations est contenue à l'intérieur de PEP 328.

PEP 328 traite absolue/relative des importations.

200voto

Sepero Points 734
import sys
sys.path.append("..") # Adds higher directory to python modules path.

106voto

Alex Martelli Points 330805

@les cascades de gimel réponse est correcte si vous pouvez garantir la hiérarchie des paquets qu'il mentionne. Si vous ne pouvez pas -- si votre besoin est, comme vous l'a dit, exclusivement liés à des répertoires et sans aucune relation nécessaire à l'emballage, alors vous avez besoin de travailler sur __file__ pour trouver le répertoire parent (quelques os.path.dirname des appels;-), puis (si ce répertoire n'est pas déjà sur sys.path) ajouter temporairement insérer dit dir au tout début de l' sys.path, __import__, retirez dit dir-salissante, en effet, mais, "lorsque vous devez, vous devez" (et Pyhon s'efforce de ne jamais cesser de le programmeur de faire ce qui doit être fait-tout comme le standard ISO C est dit dans "l'Esprit de la C" de l'article dans sa préface!-).

Voici un exemple qui peut travailler pour vous:

import sys
import os.path
sys.path.append(
    os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))

import module_in_parent_dir

31voto

Sepero Points 734
from .. import module # Import module from a higher directory.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X