В интерактивном python я хотел бы импортировать модуль, который находится, скажем,
C:\Modules\Модуль1\module.py
Что мне удалось сделать, так это создать пустой
C:\Modules\Module1\__init__.py
а затем выполните:
>>> import sys
>>> sys.path.append(r'C:\Modules\Module1')
>>> import module
И это работает, но мне нужно добавить sys.path, и если был еще один файл с именем module.py, который также находится в sys.path, то как однозначно разрешить тот, который я действительно хочу импортировать?
Есть ли другой способ импорта, который не включает добавление к sys.path?
EDIT: Здесь что-то, о чем я забыл: Является ли это правильным способом импорта скриптов python, находящихся в произвольных папках? оставьте остальную часть моего ответа здесь для справки.
Существует, но вы в основном завершаете создание собственного импортера, который вручную создает новый объект модуля и использует execfile
для запуска кода модуля в этом пространстве имен объектов. Если вы хотите это сделать, посмотрите пример mod_python importer.
Для более простого решения вы можете просто добавить каталог файла, который хотите импортировать, в начало sys.path
, а не в конец, например:
>>> import sys
>>> sys.path.insert(0, r'C:\Modules\Module1')
>>> import module
Вам не нужно создавать файл __init__.py
, если только вы не импортируете его из пакета (поэтому, если вы делали import package.module
, вам понадобится __init__.py
).
вставка в sys.path
(на первом месте) работает лучше:
>>> import sys
>>> sys.path.insert(0, 'C:/Modules/Module1')
>>> import module
>>> del sys.path[0] # if you don't want that directory in the path
append
в список помещает элемент в последнее место, поэтому вполне возможно, что другие предыдущие записи в пути имеют приоритет; поэтому размещение каталога в первом месте - это наилучший подход.