can';t访问Python中导入的函数

can';t访问Python中导入的函数,python,import,pydev,aptana,Python,Import,Pydev,Aptana,有人能帮我吗 我将继续使用PyDev Aptana开发python代码。以下是我在PyDev IDE下的项目结构: /testProject /src /testModule __init__.py testMod.py main.py testMod.py文件: def test(n): print "echo"+n import testModule testModul

有人能帮我吗

我将继续使用PyDev Aptana开发python代码。以下是我在PyDev IDE下的项目结构:

/testProject
        /src
            /testModule  
            __init__.py
            testMod.py
        main.py
testMod.py文件:

def test(n): 
    print "echo"+n 
import testModule
testModule.test(4) 
main.py文件:

def test(n): 
    print "echo"+n 
import testModule
testModule.test(4) 
当我尝试在PyDev中运行此测试时,它在main.py的第2行(其中调用了测试(4))给出了以下错误:

我将main.py更改为:

import testModule.test
testModule.test(4)  
仍然给我错误
“模块”对象不可调用


这有什么问题?

您错过了
testMod
模块。您的方法的全名是
testModule.testMod.test
这基本上是因为
testModule
中没有方法
test()
。实际上,您的
testModule
不是模块,而是一个包,而
testMod
testModule
包中的一个模块

因此,根据您的结构,以下内容将起作用:

from testModule import testMod
testMod.test(4) 

有关更多详细信息,请参见

,具体来说,
testMod
单独指的是
\uuuu init\uuuuuu.py
(可用于轻松提供整个软件包API的有限但有用的子集)。我不同意这一点。包裹就是包裹。包是作为模块集合的特定目录,在本例中就是这样。可能有人会说,
\uuuuu init\uuuu
是一个模块(尽管我不这么认为),但从testModule开始,通常不会将testModule称为模块。有关术语,请参见。Python之所以将包视为模块,是因为
\uuuu init\uuuu
将内容加载到
testModule
命名空间中,这并不意味着它不是一个包,对吧?这让人感到困惑。。。我的基本直觉是,模块是函数def等的集合,我们定义用于特殊项目。如果我们想让不同的模块具有相同的名称,我们就定义了包,因此不同包下的一个模块是不相同的,但是具有相似的名称,因为它们所做的事情是相同的。