Importuj moduł Pythona nie na ścieżce
Mam moduł foo, zawierający util.py oraz bar.py.
Chcę zaimportować go w bezczynności lub w sesji Pythona. Jak mam to zrobić?
Nie znalazłem dokumentacji jak importować Moduły Nie znajdujące się w bieżącym katalogu ani domyślnej ścieżce Pythona.
Po próbie import "<full path>/foo/util.py"
,
i from "<full path>" import util
Najbliżej było
import imp
imp.load_source('foo.util','C:/.../dir/dir2/foo')
Co dało mi odmowę pozwolenia na windows 7.
4 answers
Jednym ze sposobów jest po prostu zmiana ścieżki :
import sys
sys.path.append('C:/full/path')
from foo import util,bar
Zauważ, że wymaga to, aby foo był pakietem Pythona, tzn. zawierał plik __init__.py
. Jeśli nie chcesz modyfikować sys.path
, możesz zmodyfikować również zmienną środowiskową PYTHONPATH
lub zainstalować moduł w swoim systemie. Uważaj, że oznacza to, że inne katalogi lub pliki .py
w tym katalogu mogą być ładowane nieumyślnie.
Dlatego możesz użyć imp.load_source
zamiast tego. Potrzebuje nazwy pliku, nie jest katalogiem (do pliku, który bieżący użytkownik może odczytać):
import imp
util = imp.load_source('util', 'C:/full/path/foo/util.py')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-16 20:39:13
Możesz dostosować ścieżkę wyszukiwania modułu za pomocą zmiennej środowiskowej PYTHONPATH
lub ręcznie zmodyfikować listę katalogów sys.path
.
Patrz ścieżka wyszukiwania modułu dokumentacja na python.org.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-15 11:26:29
Spróbuj
import sys
sys.path.append('c:/.../dir/dir2')
import foo
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-15 11:29:09
Podążając za wskazówką phihaga, mam takie rozwiązanie. Po prostu podaj ścieżkę do pliku źródłowego load_src
i załaduje go. Musisz również podać nazwę, aby można było zaimportować ten moduł używając tej nazwy. Wolę to zrobić w ten sposób, ponieważ jest to bardziej wyraźne:
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()
Inny (mniej wyraźny) sposób jest taki:
util = load_src("util", "../util.py") # "import util" is implied here
print util.method() # works, util was imported by the previous line
Edit: metoda została przepisana, aby była jaśniejsza.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-01 16:52:56