IPython импортирует локальный файл

#python #ipython #python-import

#python #ipython #python-импорт

Вопрос:

Я столкнулся со странным несоответствием между IPython и интерпретатором python по умолчанию. У меня есть файл python, который скрывает имя встроенного модуля: logging.py . Скажем, у него есть простой метод foo().

Если я запускаю интерпретатор python по умолчанию и вызываю import logging его, он импортирует локальный файл, и я могу получить к нему доступ logging.foo() .

Если я запускаю IPython и вызываю import logging его, он импортирует встроенный модуль python. Если я изменю имя на не-теневое (например import my_logging ), тогда импорт будет работать должным образом.

Каково ожидаемое поведение? Текущий каталог находится в начале sys.path для обоих интерпретаторов, но они отличаются тем, какой импорт имеет приоритет.

Комментарии:

1. Я могу подтвердить, что то же самое происходит со мной с Python3.4.

Ответ №1:

 import sys
print(sys.modules)
 

IPython запускается с большей частью импортированной стандартной библиотеки, включая ведение журнала. Кажется, что эти модули импортируются по полному пути.

Предположение: IPython уже импортировал эти библиотеки по полному пути для внутреннего использования, теперь, когда вы import logging снова проверяете, что модуль уже импортирован, независимо от пути, и ничего не делает.