Импорт модуля python не по пути
у меня есть модуль foo, содержащий util.py и bar.py.
Я хочу импортировать его в IDLE или Python сессии. Как мне это сделать?
Я не смог найти документацию о том, как импортировать модули не в текущем каталоге или пути Python по умолчанию.
После попытки import "<full path>/foo/util.py"
,
и from "<full path>" import util
самое близкое, что я мог сделать был
import imp
imp.load_source('foo.util','C:/.../dir/dir2/foo')
который дал мне разрешение отказано в windows 7.
4 ответов
один из способов - просто изменить свой путь:
import sys
sys.path.append('C:/full/path')
from foo import util,bar
обратите внимание, что для этого требуется, чтобы foo был пакетом python, т. е. содержал . Если вы не хотите изменять sys.path
вы можете изменить PYTHONPATH
переменные среды или установите модуль в вашей системе. Помните, что это означает, что другие каталоги или .py
файлы в этом каталоге могут быть загружены случайно.
таким образом, вы можете использовать imp.load_source
. Ему нужно имя файла, а не каталог (файл, который текущий пользователь может прочитать):
import imp
util = imp.load_source('util', 'C:/full/path/foo/util.py')
вы можете настроить путь поиска модуля с помощью PYTHONPATH
переменная окружения или вручную измените sys.path
список каталога.
посмотреть Путь Поиска Модуля документация на python.org.
следуя подсказке фихага, у меня есть это решение. Просто укажите путь к исходному файлу load_src
и он загрузит его. Необходимо также указать имя, чтобы можно было импортировать этот модуль с помощью этого имени. Я предпочитаю делать это таким образом, потому что это более четко:
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()
другой (менее явный) способ:
util = load_src("util", "../util.py") # "import util" is implied here
print util.method() # works, util was imported by the previous line
Edit: метод переписан, чтобы сделать его более четким.