覆盖a";汇编报表;用python
为了便于讨论,让我们假设我想创建一个名为math(已经预定义)的自己的模块,然后从另一个模块导入它。以下是我的代码的目录结构:覆盖a";汇编报表;用python,python,overriding,Python,Overriding,为了便于讨论,让我们假设我想创建一个名为math(已经预定义)的自己的模块,然后从另一个模块导入它。以下是我的代码的目录结构: __init__.py math.py 因此,在\uuuu init\uuuuuuuuy.py中,我希望这样做 from math import whatever 如果我运行\uuuu init\uuuuuuuupy,将选择内置的数学模块,而不是我包含的数学模块,但我想访问我的数学模块。我发现解决这个问题的唯一方法就是简单地将math.py重命名为与mymath.p
__init__.py
math.py
因此,在\uuuu init\uuuuuuuuy.py
中,我希望这样做
from math import whatever
如果我运行
\uuuu init\uuuuuuuupy
,将选择内置的数学模块,而不是我包含的数学模块,但我想访问我的数学模块。我发现解决这个问题的唯一方法就是简单地将math.py重命名为与mymath.py不同的名称。如何在保持模块原始名称的同时完成此操作 通常不赞成替换默认模块——您不知道副作用。我想我应该首先建议您将它放在某个子文件夹中(如果它在“my”文件夹中,您可以将my.math导入为math
),然后我建议重命名它
如果必须,则可以确保sys.path中的math.py路径是第一个路径。你可以这样做:
import sys, os
sys.path.insert(0,os.getcwd())
首先,将模块命名为stdlib模块是个坏主意。你可能不知道什么时候会被意外的结果绊倒 其次,你所说的是完全可能的
foo
\uuuuu init\uuuuuu.py
math.py
,内容包括print“something”
也许您正在做其他事情?如果您的包名为testpack,您可以执行以下操作: testpack/myfile.py
import math
from testpack import math as mymath
print (math.sin(3))
print (mymath.hello())
其中testpack/math.py为:
def hello():
print ('this is math')
这将为您提供:
0.14112000806
this is math
所以你可以使用这两个数学模块
编辑:为python 3.x更新注意:文件夹结构为:
mypackages\
__ini__.py
..........
..........
testpack\
__init__.py
math.py
myfile.py
为什么它必须有相同的名字?因为我不是模块的原始作者。没有人拿枪指着我的头,但我听从原作者的话。另外,我通过这种方式学到了一些新东西。我重试了,正如我所说的配置。当名称与默认模块相同时,我得到一个ImportError。当名称不同时,程序将一直执行到完成。我使用PyDev,我的默认Python版本目前是3.1.Ok,我发现这是PyDev配置问题(告诉Eclipse src目录是正确的)。这个答案事实上应该是有效的,并且是一个恰当的解释(并且使我感到惊讶)。因此,如果我从mypackage.math导入任何内容,那就足够了。我承认复制默认模块名称是非常糟糕的做法,但我试图在问题部分解释我对这个特定场景的基本原理。