В интерактивном Python, как однозначно импортировать модуль

1

В интерактивном 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?

Показать ещё 1 комментарий
Теги:
import
path

2 ответа

4
Лучший ответ

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).

1

вставка в 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 в список помещает элемент в последнее место, поэтому вполне возможно, что другие предыдущие записи в пути имеют приоритет; поэтому размещение каталога в первом месте - это наилучший подход.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню