1

我查看了 Python 2.7.5 文档。我的真实项目有问题,但在这里创建了一个小型测试项目来简洁地重现该问题。想象一个具有以下布局的包存储在 ~/Development/Test

这是结构:

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

和代码(__init__.py文件是空的):

foo.py

def bar():
    print("hello world")

test_foo.py

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 editor 和插件python test runner,我可以很好地运行我的个人测试,但我无法构建测试文件。它给了我上述错误。

4

2 回答 2

1

模块名称区分大小写。利用:

import Test.foo as foo

as foo这样你就可以打电话foo.barmain。)


您还必须~/Development在 PYTHONPATH 中列出。

如果使用 Unix 并且您的登录 shell 是 bash,则添加~/DevelopmentPYTHONPATH编辑 ~/.profile 以包含

export PYTHONPATH=$PYTHONPATH:$HOME/Development

以下是Windows 的说明


进一步的调试建议:

地方

import sys
print(sys.path)
import Test
print(Test)
import Test.foo

在顶部test_foo.py。请发布输出。

于 2013-08-18T17:07:51.847 回答
1

可运行脚本应始终放在模块之外。因此,如果您有一个模块和一个从该模块运行一些代码的脚本,则结构应如下所示:

foo/
    __init__.py
    bar.py
your_script.py

中的代码your_script.py应该是这样的:

from foo.bar import your_func

your_func()

在单元测试的情况下,将测试放在模块中一个好主意(这是自以为是的,每个人都有自己的做事方式),因此结构应该如下所示:

foo/
    __init__.py
    bar.py
    tests/
        test_bar.py

但在这种情况下,您不应该直接运行脚本。您应该使用其中一种测试框架,例如nose并运行:

nosetests foo

在您放置foo模块的目录中。

或者,如果您使用标准unittest库,请创建一个TestSuite和其他的,使用以下命令运行它:

python -m unittest foo.tests.test_bar

再次在您放置 foo 模块的目录中。

于 2013-08-18T17:29:45.183 回答