#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
снова проверяете, что модуль уже импортирован, независимо от пути, и ничего не делает.