当有一个名称相同的本地模块时,如何访问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
为什么你不能重新命名你的本地模块?
显然,如果您仍然需要安装uncertainties
中的东西,那么它不是“全部”替代品。
由于是部分替换,所以不应该给它同名。
有什么不同?什么是相同的?根据这个选择一个更好的名字。
+1:理所当然的,它不是一个完整的替代品。我将考虑重新命名(未来)不确定性.math模块。 PS:标准的数学模块用于不确定因素。因为不确定性是通过不知道不确定性的数学函数操纵的(不确定性因素可以使用模块,速度成本,因为它比标准数学模块更普遍) – EOL 2009-12-14 12:43:07
@EOL:你不能简单地用另一个同名的模块来代替基本的“数学”。期。这让用户感到困惑。尽管您希望提供平滑的“引脚到引脚”替换,但不要这样做。请不要。称之为“umath”或者明确指出它不是“数学”的东西。 – 2009-12-14 12:47:18
@S。洛特:是的,我曾认为“进口不确定因素可能会很明显,因为从不确定因素导入数学”,但我没有看到“math.sin()”会令人困惑。我会以你的名义为它命名。 :) – EOL 2009-12-15 13:40:44
验证为答案:这回答了这个问题(尽管S.洛特让我相信我应该遵循另一条路线:)。 – EOL 2009-12-15 13:42:06
是的,我不会使用数学作为模块名称;) – mbarkhau 2009-12-15 15:59:59
“可能在2.7” - 实际上从未发生过。 2.7用户需要absolute_import行,如果他们想要这种行为。 – Joe 2015-01-12 19:33:24