Python importe le chemin relatif
J'ai un projet où je voudrais utiliser certaines classes python situés dans d'autres répertoires.
Structure exemple:
/dir
+../subdirA
+../subdirB
+../mydir
Le chemin d'accès absolu varie, parce que ce projet est exécuté sur des machines différentes.
Lorsque mon fichier python avec MySampleClass situé dans /mydir est exécuté, comment puis-je importer OtherClassRoot situé dans /dir ou OtherClassA situé dans /subdirA?
J'ai essayé des choses comme:
from . import MySampleClass as msc
ou
from ../ import MySampleClass as msc
mais cela échoue toujours ou me donne des messages d'erreur comme Tentée par rapport à l'importation de non-package
Alors, quelle est la bonne façon d'relativement à l'importation des fichiers python?
Toute entrée est très apprécié 🙂
source d'informationauteur daniel451
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin d'un
__init__.py
dans le mydir répertoire (et il peut être vide), puis en tant que dir est dans le sys chemin, en supposant que votre MySampleClass est dans myfile.py et myfile.py est dans mydirSi vous souhaitez importer haut niveau de fonctions à partir d'un fichier appelé util.py qui résident dans subdirA en myfile.py (où votre classe), puis un
__init__.py
doit être en subdirA puis dans myfile.pyLa même chose est vraie de la sys chemin, qui est, vous devez commencer à partir de 'dir' ou l'ajouter. Tout est importé à partir du niveau supérieur du paquet (généralement votre dossier de projet).
Cependant, pour le module de test, où vous pouvez exécuter une fonction à partir d'util dans l'interpréteur, si vous commencez à partir de subdirA, vous aurez besoin d'ajouter dir pour le sys chemin, de sorte que votre importations peut résoudre.
mais c'est un hack et serait préférable d'utiliser uniquement de l'interprète lorsque vous testez. Vous pouvez également ajouter 'dir' de votre site de paquets dans un fichier pth.
À l'utilisation relative des importations, vous avez besoin d'une plus profonde de dossiers imbriqués, comme subdirA/subdirofA, puis dans subdirofA, vous pourriez utiliser . de revenir en arrière (comme
from .subdirB
). Vraiment, pour moi, par rapport importations sont un peu difficiles à voir l'utilité. C'est mieux pour moi d'utiliser les importations directes par rapport au répertoire du projetmais je pouvais les voir être utile si vous vouliez nest le naïf sous emballage, mais encore une fois, encore mieux d'être explicite qu'implicite, si possible.voir aussi cette
d'abord ajouter les chemins d'accès relatifs à la pythonpath
puis importer les modules.
Sur dir structure comme suit:
combinaison avec la commande linux
ln
, on peut rendre les choses beaucoup plus simple:Et, maintenant, si vous voulez importer
some_stuff
du fichier:dir/subdirA/fileA.py
dans votre fichier:dir/mydir/myfile.py
il suffit d'importer comme ceci:Et, la même chose s'applique à "dir/subdirB'
Qui Plus est, cela fonctionne pour
setup.py
processus, 🙂