2012-07-15 64 views
4

我有一个2 python文件。一个是试图导入第二个。我的问题是第二个被命名为math.py.我无法重命名它。当我尝试调用位于math.py中的函数时,我无法完成全局数学模块。我将如何导入我的本地文件而不是全局。我使用Python 2.7,这是(大约)我进口statment:通过全局python导入本地模块

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" 
+1

我只是试图建立与'进口math'一个'test.py'和'math.py'在同一目录下,并它工作得很好。我可以在我自己的'math.py'中调用'math.foo()',没有任何问题。 – 2012-07-15 04:10:50

+0

我得到AttributeError(“'模块'对象没有属性'main'”,) – jbills 2012-07-15 04:22:40

+0

你能提供一个小而完整的例子,显示你正在做什么导致这个错误? – 2012-07-15 04:24:26

回答

3

Python进程有一个加载模块的单一名称空间。如果您(或任何其他模块)出于任何原因已经加载了标准math模块,则尝试再次使用import__import__()加载模块将仅返回对已加载模块的引用。您应该能够使用print id(math)print id(command)进行验证。

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

command = __import__("cmd_" + cstr) 

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

+0

谢谢,我会尝试你的第二个建议。第一个没有工作,我得到一个名称错误,说数学没有定义。 – jbills 2012-07-15 04:41:44