Вопрос по python – Импортировать модуль python НЕ по пути

48

У меня есть модуль foo, содержащий util.py и bar.py.

Я хочу импортировать его в IDLE или Python сессии. Как мне это сделать?

Я не смог найти документацию о том, как импортировать модули не в текущем каталоге или в PATH по умолчанию. После попыткиimport "<full path>/foo/util.py", and from "<full path>" import util

Самый близкий, который я мог получить, был

import imp
imp.load_source('foo.util','C:/.../dir/dir2/foo')

Который дал мне разрешение на отказ от Windows 7.

Также стоит проверить этоrelated question, В частности, мне нравитсяtop answer там, для ясности о безопасности изменений вsys.path. John Y
Возможный дубликатHow to import a module given the full path? Dan Gayle

Ваш Ответ

4   ответа
1

у меня есть это решение. Просто укажите путь к исходному файлу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: метод переписан, чтобы сделать его более понятным.

5

PYTHONPATH переменная среды, или вручную изменитеsys.path список каталогов.

УвидетьПуть поиска модуля документация на python.org.

65

дорожка:

import sys
sys.path.append('C:/full/path')
from foo import util,bar

Обратите внимание, что для этого требуется, чтобы foo был пакетом Python, т.е.__init__.py файл. Если вы не хотите изменятьsys.path, вы можететакже изменитьPYTHONPATH environment variable или жеустановить модуль в вашей системе, Помните, что это означает, что другие каталоги или.py файлы в этом каталоге могут быть случайно загружены.

Поэтому вы можете использоватьimp.load_source вместо. Ему нужно имя файла, а не каталог (к файлу, который может прочитать текущий пользователь):

import imp
util = imp.load_source('util', 'C:/full/path/foo/util.py')
Error: User Rate Limit ExceededmethodError: User Rate Limit ExceededmethodError: User Rate Limit ExceededutilError: User Rate Limit Exceededmethod = util.methodError: User Rate Limit Exceeded
Error: User Rate Limit Exceededfrom foo import *Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Vort3x
Error: User Rate Limit Exceededpackage. __init__.py isError: User Rate Limit Exceededmkdir foo; touch foo/util.py; python -c 'from foo import util'Error: User Rate Limit Exceededtouch foo/__init__.py; python -c 'from foo import util'
Error: User Rate Limit Exceededexplicitly mentions sys.pathError: User Rate Limit Exceededsys.pathError: User Rate Limit ExceededimpError: User Rate Limit Exceededsys.pathError: User Rate Limit Exceededsystem's PATHError: User Rate Limit ExceededjsonError: User Rate Limit Exceeded
2

import sys
sys.path.append('c:/.../dir/dir2')
import foo
Error: User Rate Limit Exceededsys.pathError: User Rate Limit ExceededanError: User Rate Limit Exceededsys.pathError: User Rate Limit ExceedednotError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы