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?
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?
À 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écutezfrom . import mod
à partir d'un module dans l'pkg
forfait sera à la fin de l'importationpkg.mod
. Si vous exécutezfrom ..subpkg2 import mod
de dans lespkg.subpkg1
vous allez importerpkg.subpkg2.mod
. La spécification relative des importations est contenue à l'intérieur de PEP 328.
PEP 328 traite absolue/relative des importations.
@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
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.