在全球蟒蛇导入本地模块(Import Local module over global python

2019-06-26 07:21发布

我有一个2个Python文件。 一个试图导入第二。 我的问题是第二个被命名为math.py. 我不能重新命名它。 当我尝试打电话给位于内math.py一个功能,我不能,因为我结束了全球数学模块。 我将如何导入我的本地文件,而不是全球性的。 我使用Python 2.7,这是(大约)我进口statment:

cstr = "math"
command = __import__(cstr)

后来我尝试:

command.in_math_py_not_global()

编辑:一个更完整的例子:

def parse(self,string):
    clist = string.split(" ")
    cstr= clist[0]
    args = clist[1:len(clist)]
    rvals = []
    try:
        command = __import__(cstr)
        try:
            rvals.extend(command.main(args))
        except:
            print sys.exc_info()
    except ImportError:
        print "Command not valid"

Answer 1:

蟒方法具有加载的模块的一个命名空间。 如果您(或任何其它模块 )已经加载了标准math模块以任何理由,然后尝试再次与加载import__import__()将只是一个参考返回已加载的模块。 你应该能够验证这一点使用print id(math) ,并比较print id(command)

虽然你说,你是无法更改的名称math.py ,我建议你可以。 你所得到的模块的名称,从用户负载。 实际上,你可以使用之前修改此__import__()函数来添加一个前缀。 例如:

command = __import__("cmd_" + cstr)

然后,重命名math.pycmd_math.py ,你会避免这种冲突。



Answer 2:

你可以使用相对进口:

from . import math

http://docs.python.org/tutorial/modules.html#intra-package-references



文章来源: Import Local module over global python