Непреднамеренная перезапись стандартного модуля Python 2.7 - как это предотвратить? - PullRequest
0 голосов
/ 16 марта 2019

Я хотел добавить кое-что в модуль журналирования Python, поэтому я создал отдельный модуль под именем пакета «my», который находится в каталоге проекта (который является первой записью в sys.path).У меня также есть другой модуль, который находится в том же пространстве:

my
my.logging
my.something

Теперь я хотел записать материал в my.something и добавил import logging в файл - но, похоже, Python загружает my.logging вместо стандартного модуля.

При чтении документации по Python (раздел 6.1.2. Путь поиска модуля) я думал, что я в безопасности:

Когда импортируется модуль с именем спам, интерпретатор сначала ищетдля встроенного модуля с таким именем.Если файл не найден, он ищет файл с именем spam.py в списке каталогов, заданных переменной sys.path.

Таким образом, «стандартный модуль» не является «встроенным модулем»«?Тогда я думаю, что мне нужно переместить модули my из текущего каталога -?Другие возможности?

1 Ответ

0 голосов
/ 16 марта 2019

Когда написано «встроенный модуль», эта строка документов ссылается на модули, фактически скомпилированные непосредственно в исполняемый файл Python.Вы можете увидеть, какие из них находятся в sys.builtin_module_names.

Что вам нужно сделать, это отключить неявный относительный импорт, который можно сделать для каждого файла с помощью absolute_import будущее заявление:

from __future__ import absolute_import
...