我复习了the Python 2.7.5 documentation。我的真实项目有问题,但是在这里创建了一个小测试项目来简洁地再现这个问题。设想一个具有以下布局的包存储在~/development/test
结构如下:

Test/
    __init__.py
    foo.py
    sub/
        __init__.py
        test_foo.py

代码(__init__.py文件是empy):
食品
def bar():
    print("hello world")

测试方法
import Test.foo
# also tried from Test import foo

def main():
    foo.bar()

if __name__ == "__main__":
    main()

当试图从终端运行test_foo.py时(即python test_foo.py),我得到:
Traceback (most recent call last):
  File "test_foo.py", line 1, in <module>
    import Test.foo
ImportError: No module named Test.foo

我试图从子模块中的测试文件导入包中的主文件(foo.py)(在我的实际项目中,子模块是单元测试代码)。奇怪的是,使用Sublime text 2编辑器和插件python test runner,我可以很好地运行我的单独测试,但是我不能构建测试文件。它给了我上述的错误。

最佳答案

模块名区分大小写。使用

import Test.foo as foo

(使用as foo可以在foo.bar中调用main
您还必须在pythonpath中列出~/Development
如果使用unix并且您的登录shell是bash,则添加~/DevelopmentPYTHONPATHedit~/.profile以包括
export PYTHONPATH=$PYTHONPATH:$HOME/Development

这里有instructions for Windows
进一步调试建议:
地点
import sys
print(sys.path)
import Test
print(Test)
import Test.foo

test_foo.py的顶部。请张贴输出。

10-08 01:45