通过全局python导入本地模块

时间:2012-07-15 04:05:41

标签: python import python-2.7

我有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"

2 个答案:

答案 0 :(得分:3)

Python进程只有一个加载模块的命名空间。如果您(或任何其他模块)因任何原因已加载标准math模块,则尝试使用import__import__()再次加载该模块返回对已加载模块的引用。您应该可以使用print id(math)验证并与print id(command)进行比较。

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

command = __import__("cmd_" + cstr)

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

答案 1 :(得分:2)

您可以使用相对导入:

from . import math

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