6

我有 2 个 python 文件。一个是尝试导入第二个。我的问题是第二个被命名为 math.py。我不能重命名它。当我尝试调用位于 math.py 中的函数时,我不能,因为我最终得到了全局数学模块。我将如何导入我的本地文件而不是全局文件。我正在使用 Python 2.7,这(大致)是我的导入语句:

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"
4

2 回答 2

3

Python 进程有一个加载模块的命名空间。如果您(或任何其他模块)出于某种原因已经加载了标准math模块,那么尝试再次加载它import__import__()将简单地返回对已加载模块的引用。您应该能够使用print id(math)和比较来验证这一点print id(command)

尽管您已声明无法更改 的名称math.py,但我建议您可以。您正在从用户那里获取要加载的模块的名称。__import__()您可以在实际使用该函数添加前缀之前对其进行修改。例如:

command = __import__("cmd_" + cstr)

然后,重命名math.pycmd_math.py,您将避免此冲突。

于 2012-07-15T04:37:02.903 回答
3

您可以使用相对导入:

from . import math

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

于 2012-07-15T08:24:09.493 回答