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

问题描述:

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

我问这个问题,因为我想创建一个包uncertainties一个可以使用的

import uncertainties 
from uncertainties.math import * 

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

我不喜欢重新命名不确定因素,因为这个模块的目的是用数学模块(用等价的数值不确定性)代替函数。

PS:这个问题属于我为执行calculations with uncertainties而编写的模块,同时考虑到变量之间的相关性。

您正在寻找从PEP 328进口的绝对值/相对值,可通过2.5 and upward获取。

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

相对进口使用从...进口形式时仍然加入了领先的周期模块名称可能:

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

验证为答案:这回答了这个问题(尽管S.洛特让我相信我应该遵循另一条路线:)。 – EOL 2009-12-15 13:42:06

+0

是的,我不会使用数学作为模块名称;) – mbarkhau 2009-12-15 15:59:59

+4

“可能在2.7” - 实际上从未发生过。 2.7用户需要absolute_import行,如果他们想要这种行为。 – Joe 2015-01-12 19:33:24

为什么你不能重新命名你的本地模块?

显然,如果您仍然需要安装uncertainties中的东西,那么它不是“全部”替代品。

由于是部分替换,所以不应该给它同名。

有什么不同?什么是相同的?根据这个选择一个更好的名字。

+0

+1:理所当然的,它不是一个完整的替代品。我将考虑重新命名(未来)不确定性.math模块。 PS:标准的数学模块用于不确定因素。因为不确定性是通过不知道不确定性的数学函数操纵的(不确定性因素可以使用模块,速度成本,因为它比标准数学模块更普遍) – EOL 2009-12-14 12:43:07

+0

@EOL:你不能简单地用另一个同名的模块来代替基本的“数学”。期。这让用户感到困惑。尽管您希望提供平滑的“引脚到引脚”替换,但不要这样做。请不要。称之为“umath”或者明确指出它不是“数学”的东西。 – 2009-12-14 12:47:18

+1

@S。洛特:是的,我曾认为“进口不确定因素可能会很明显,因为从不确定因素导入数学”,但我没有看到“math.sin()”会令人困惑。我会以你的名义为它命名。 :) – EOL 2009-12-15 13:40:44