Si l'ajout du dossier de votre module au PYTHONPATH n'a pas fonctionné, vous pouvez modifier le fichier de configuration du module. sys.path dans votre programme, où l'interpréteur Python recherche les modules à importer, l'option documentation python dit :
Lorsqu'un module nommé spam est importé, l'interpréteur recherche d'abord un module intégré portant ce nom. S'il ne le trouve pas, il cherche alors un fichier nommé spam.py dans une liste de répertoires donnée par la variable sys.path. sys.path est initialisé à partir de ces emplacements :
- le répertoire contenant l'entrée script (ou le répertoire courant).
- PYTHONPATH (une liste de noms de répertoires, avec la même syntaxe que la variable shell PATH).
- la valeur par défaut dépendant de l'installation.
Après l'initialisation, les programmes Python peuvent modifier sys.path . Le répertoire contenant le script en cours d'exécution est placé au début du chemin de recherche, avant le chemin de la bibliothèque standard. Cela signifie que les scripts de ce répertoire seront chargés à la place des modules du même nom dans le répertoire de la bibliothèque. Il s'agit d'une erreur, sauf si le remplacement est prévu.
Sachant cela, vous pouvez faire ce qui suit dans votre programme :
import sys
# Add the ptdraft folder path to the sys.path list
sys.path.append('/path/to/ptdraft/')
# Now you can import your module
from ptdraft import nib
# Or just
import ptdraft
1 votes
Quel est le réglage de votre PYTHONPATH ?
2 votes
Ross : J'ai regardé là. Qu'est-ce que je devrais faire ? J'ai déjà un
__init__.py
. S.Lott : Je ne sais pas comment vérifier...4 votes
Echo $PYTHONPATH depuis le shell ; import sys ; print sys.path depuis Python. docs.python.org/tutorial/
0 votes
@FlipMcF Google est un moteur de recherche à bulles, donc le fait que ce résultat soit assez haut pour vous n'a pas d'importance. Ce qui est beaucoup plus important, c'est le fait que le moteur de recherche sans bulles, DuckDuckGo, le classe également très haut.
0 votes
@FlipMcF Il n'y a rien de mal à faire une importation absolue comme dans la réponse de hasen. Cela est fait des centaines de fois dans Django. C'est tout à fait acceptable. Dans certains cas, faire un import relatif est plus agréable et plus court, alors n'hésitez pas à utiliser ces méthodes de manière interchangeable.
0 votes
@RamRachum Mon opinion a depuis changé en faveur des importations absolues. Les importations relatives sont bien, mais "Explicit is better than Implicit" et dans une moindre mesure "Namespaces are a 'honkin great idea".
0 votes
@FlipMcF mais j'ai entendu dire que les importations relatives sont considérées comme un mauvais comportement ?
1 votes
Vous voudrez peut-être jeter un coup d'œil à ce guide définitif chrisyeh96.github.io/2017/08/08/…
19 votes
Je recommande fortement de passer outre toutes les
sys.path
ouPYTHONPATH
les réponses et les vérifications L'excellente réponse de np8 . Oui, c'est une longue lecture. Oui, cela ressemble à beaucoup de travail. Mais c'est la seule réponse qui résout le problème correctement et proprement.8 votes
Qu'est-il arrivé au pseudocode exécutable ? Pourquoi est-ce si pénible d'importer des modules d'un dossier parent en Python ? C'est absurde.
2 votes
@eric : C'est difficile seulement si vous n'êtes pas cohérent : utiliser une disposition de fichier appropriée à une paquet (une bibliothèque compliquée et réutilisable, dont votre script n'est qu'un client) mais en essayant de l'exécuter en tant que jetable script (sans même
python -m
).12 votes
Pourquoi est-ce si pénible ? Après avoir lu toutes les discussions et réponses, il n'y a toujours pas de solution simple et raisonnable.