骨架目录:为什么当 nosetests returns 没有错误时脚本会失败?
Skeleton Directory: Why does script fail when nosetests returns no errors?
(在 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 模块并从中调用绘制函数。
按照 Shaw 的指示,我 运行 从测试目录上方进行了 nosetests,我得到了零错误的 ok。
然后我切换到测试目录并从命令行输入 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 returns 没有错误时,为什么 first_project_tests.py 脚本会失败?
Python 从 模块搜索路径 导入相关工作。当前目录自动包含在此路径中。
当你在项目的顶层运行nosetests
时,在相对路径中找到了first_project
里面有wasp
的模块,因为first_project/wasp.py
相对于执行目录存在。
当您进入 tests
并尝试 运行 first_project_tests.py
时,导入语句失败,因为该目录中不存在相对路径 first_project/wasp.py
。
您可以从项目根目录 运行 像这样:
python tests/first_project_tests.py
(在 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 模块并从中调用绘制函数。
按照 Shaw 的指示,我 运行 从测试目录上方进行了 nosetests,我得到了零错误的 ok。
然后我切换到测试目录并从命令行输入 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 returns 没有错误时,为什么 first_project_tests.py 脚本会失败?
Python 从 模块搜索路径 导入相关工作。当前目录自动包含在此路径中。
当你在项目的顶层运行nosetests
时,在相对路径中找到了first_project
里面有wasp
的模块,因为first_project/wasp.py
相对于执行目录存在。
当您进入 tests
并尝试 运行 first_project_tests.py
时,导入语句失败,因为该目录中不存在相对路径 first_project/wasp.py
。
您可以从项目根目录 运行 像这样:
python tests/first_project_tests.py