Как получить доступ к модулю стандартной библиотеки в 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.

Так как это частичная замена, вы не должны давать ему то же имя.

Чем отличается? Что же? Выберите лучшее имя, основанное на этом.