2010-10-16 68 views
1

我有一系列的单元测试,我正在运行鼻子。对于我的一些测试,我想从sys.path中删除一个模块的路径,所以与我测试的内容没有冲突。为什么nosetests不能找到sys.path中的元素?

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

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

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

回答

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" 
1

你不是这个意思吗?

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

如果鼻子不能sys.path找到它,然后它不存在... 鼻子做大量与sys.path自身diddling的。为什么不打印sys.path,看看它在机头下运行时的实际情况

+0

谢谢你的追捕。我编辑了这个问题。我还在鼻子和Eclipse中打印了几次迭代测试,但我没有看到包含或排除某些路径的模式。现在,我已经创建了一个简单的脚本来在运行nosetests之前设置PYTHONPATH。 – 2010-10-16 20:20:54

相关问题