Как получить доступ к модулю стандартной библиотеки в Python, когда есть локальный модуль с тем же именем?
Как можно получить доступ к модулю стандартной библиотеки (скажем, математике), когда файл prog.py помещается в тот же каталог, что и локальный модуль с тем же именем (math.py)?
Я задаю этот вопрос, потому что хотел бы создать пакет uncertainties
, который можно использовать как
import uncertainties
from uncertainties.math import *
Таким образом, внутри каталога неопределенностей есть локальный математический модуль. Проблема в том, что я хочу получить доступ к стандартным библиотечным математическим модулям из неопределенностей /__ init __. Py.
Я предпочитаю не переименовывать неопределенность .math, потому что этот модуль точно предназначен для замены функций из математического модуля (с эквивалентами, которые обрабатывают числовые неопределенности).
PS: этот вопрос относится к модулю, который я написал для выполнения расчетов с неопределенностями, принимая во внимание корреляции между переменными.
Ответы
Ответ 1
Вы ищете Абсолютный/Относительный импорт из PEP 328, доступный с 2,5 и выше.
В Python 2.5 вы можете переключить импорт на абсолютный импорт, используя директиву абсолютной____ импорта____. Это абсолютное поведение импорта станет дефолтом в будущей версии (возможно, Python 2.7). Как только абсолютный импорт будет использоваться по умолчанию, импортная математика всегда найдет стандартную версию библиотеки. В нем предлагается, чтобы пользователи стали максимально использовать абсолютный импорт, поэтому предпочтительнее начать запись из строки импорта pkg в ваш код.
Относительный импорт по-прежнему возможен путем добавления ведущего периода к имени модуля при использовании формы импорта...
from __future__ import absolute_import
# Import uncertainties.math
from . import math as local_math
import math as sys_math
Ответ 2
Почему вы не можете повторно переименовать свой локальный модуль?
Ясно, что это не "полная" замена, если вам все еще нужны вещи из установленного uncertainties
.
Так как это частичная замена, вы не должны давать ему то же имя.
Чем отличается? Что же? Выберите лучшее имя, основанное на этом.