为什么nosetests不能在sys.path中找到一个元素?

时间:2010-10-16 02:44:50

标签: python nose nosetests pythonpath

我有一系列单元测试,我正在使用 nose 运行。对于我的一些测试,我想从sys.path中删除模块的路径,因此与我测试的内容没有冲突。

sys.path.remove('/path/to/remove/from/sys/path')

如果我运行Python解释器并调用sys.path,则'/path/to/remove/from/sys/path'就在列表中。但是,一旦调用了nosetests,上面的代码就找不到它并给我一个“找不到列表”的错误。

为什么鼻子无法找到sys.path中的路径?

2 个答案:

答案 0 :(得分:1)

你的意思不是吗?

sys.path.remove('/path/to/remove/from/sys/path')

如果 nose 无法在sys.path中找到它,那么它就不存在了...... nose sys.path做了很多努力在其自己的。为什么不打印sys.path并查看在 nose

下运行时的实际情况

答案 1 :(得分:0)

创建一个脚本get_mod_py_path.py来设置PYTHONPATH。在这种情况下,它正在丢弃冲突的路径。

import os
import sys

# Remove the global Python modules from the PYTHONPATH.
path = os.environ['PYTHONPATH'].split(os.pathsep)
if os.environ['GLOB_PY_MODULES'] in path: 
    path.remove(os.environ['GLOB_PY_MODULES'])

# Construct the new path and print it. 
path = ':'.join(path)
print path

然后在调用nosetests的bash中使用它。

PYTHONPATH=`python get_mod_py_path.py`   
nosetests --verbosity=1 --with-gae --where="../tests/unit" --gae-application="../app"