当存在具有相同名称的本地模块时,如何在Python中访问标准库模块?


问题内容

将文件prog.py与具有相同名称(math.py)的本地模块放在同一目录中时,如何访问标准库模块(例如数学)?

我问这个问题是因为我想创建uncertainties一个可以用作

import uncertainties
from uncertainties.math import *

因此,不确定性目录中有一个本地数学模块。问题是我想从不确定性/init.py访问标准库数学模块。

我不想重命名不确定性.math,因为此模块正好是要替换数学模块中的函数(使用处理数值不确定性的等效项)。

PS:这个问题与我编写的用于在考虑变量之间的相关性的同时进行不确定性计算的模块有关。


问题答案:

您正在从PEP
328
寻找绝对/相对进口,可用2.5或更高版本

在Python 2.5中,您可以使用from future import
absolute_import指令将导入的行为切换为绝对导入。在将来的版本(可能是Python
2.7)中,此绝对导入行为将成为默认设置。一旦将绝对导入设置为默认设置,导入数学将始终找到标准库的版本。建议用户应尽可能多地开始使用绝对导入,因此最好从代码中的pkg
import字符串开始编写。

在使用from … import格式时,可以通过在模块名称上添加前导句号来实现相对导入:

from __future__ import absolute_import
# Import uncertainties.math
from . import math as local_math
import math as sys_math