(在Debian Linux上使用bash命令行,Python 2.7.12。)
在Zed Shaw的LPTHW之后,我构建了一个帮助测试软件的项目框架。首先是大纲。
设置:
bin docs first_project setup.py tests
./bin:
./docs:
./first_project:
__init__.py wasp.py
./tests:
first_project_tests.py __init__.py
wasp.py的内容:
def paint(color):
print color * 10
first_projects_tests.py的内容:
from nose.tools import *
from first_project import wasp
def test_paint():
wasp.paint("blue")
根据我对Zed Shaw的解释的理解,first_project目录中的__init__.py
告诉Python其中的文件可以作为模块导入。因此,测试目录中的脚本first_project_tests.py从first_project目录导入wasp.py模块并从中调用paint函数。
按照Shaw的指示,我从测试目录上方运行了nosetests,我得到了一个零错误的确定。
然后我转换到tests目录并从命令行输入python first_project_tests.py,假设我能够运行脚本而没有问题,因为nosetests命令没有给出任何错误。
我收到以下错误:
Traceback (most recent call last):
File "first_project_tests.py", line 2, in <module>
from first_project import wasp
ImportError: No module named first_project
那么,当nosetests没有返回任何错误时,为什么first_project_tests.py脚本会失败?
答案 0 :(得分:1)
Python导入工作相对于模块搜索路径。当前目录自动包含在此路径中。
当您在项目的顶层运行nosetests
时,会在相对路径中找到first_project
内部带有wasp
的模块,因为first_project/wasp.py
存在于相对路径中执行目录。
进入tests
并尝试运行first_project_tests.py
时,import语句失败,因为该目录中不存在相对路径first_project/wasp.py
。
您可以从项目根目录运行:
python tests/first_project_tests.py