J'ai un module foo, contenant util.py et bar.py.
Je veux l'importer dans IDLE ou python session. Comment procéder?
Je n'ai trouvé aucune documentation sur la manière d'importer des modules qui ne se trouvent pas dans le répertoire actuel ni dans le répertoire par défaut python CHEMIN. Après avoir essayé import "<full path>/foo/util.py"
, et from "<full path>" import util
Le plus proche que je pouvais obtenir était
import imp
imp.load_source('foo.util','C:/.../dir/dir2/foo')
Ce qui m'a donné la permission refusée sur Windows 7.
Une solution consiste à modifier simplement votre chemin :
import sys
sys.path.append('C:/full/path')
from foo import util,bar
Notez que cela nécessite que foo soit un package python, c’est-à-dire contient un __init__.py
fichier. Si vous ne voulez pas modifier sys.path
, vous pouvez modifier également la variable d’environnement PYTHONPATH
ou installer le module sur votre système . Attention, cela signifie que d’autres répertoires ou .py
Les fichiers de ce répertoire peuvent être chargés par inadvertance.
Par conséquent, vous pouvez utiliser imp.load_source
à la place. Il faut le nom de fichier, pas un répertoire (dans un fichier que l'utilisateur actuel est autorisé à lire):
import imp
util = imp.load_source('util', 'C:/full/path/foo/util.py')
Vous pouvez personnaliser le chemin de recherche du module à l’aide de la variable d’environnement PYTHONPATH
ou modifier manuellement le fichier sys.path
liste de répertoires.
Voir Chemin de recherche du module documentation sur python.org.
Essayez ceci
import sys
sys.path.append('c:/.../dir/dir2')
import foo
Après le conseil de phihag, j'ai cette solution. Il suffit de donner le chemin d’un fichier source à load_src
et il le chargera. Vous devez également fournir un nom pour pouvoir importer ce module en utilisant ce nom. Je préfère le faire de cette façon parce que c'est plus explicite:
def load_src(name, fpath):
import os, imp
return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath))
load_src("util", "../util.py")
import util
print util.method()
Une autre manière (moins explicite) est la suivante:
util = load_src("util", "../util.py") # "import util" is implied here
print util.method() # works, util was imported by the previous line
Edit: la méthode est réécrite pour la rendre plus claire.