为什么nosetests找不到sys.path中的一个元素?
我有一系列的单元测试,使用nose来运行。有些测试我想从sys.path
中移除一个模块的路径,这样就不会和我正在测试的内容发生冲突。
sys.path.remove('/path/to/remove/from/sys/path')
如果我直接运行Python解释器并查看sys.path
,我会看到'/path/to/remove/from/sys/path'
在列表里。但是,一旦调用nosetests,这段代码就找不到这个路径,并且给我报了一个“在列表中找不到”的错误。
为什么nose找不到sys.path
中的这个路径呢?
2 个回答
1
你是不是想说这个?
sys.path.remove('/path/to/remove/from/sys/path')
如果 nose 在 sys.path
中找不到它,那说明它根本不存在…… nose 会自己对 sys.path
做很多处理。为什么不打印一下 sys.path
,看看在 nose 运行时它到底是什么样的呢?
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
然后在一个 bash 脚本中使用它,来调用 nosetests。
PYTHONPATH=`python get_mod_py_path.py`
nosetests --verbosity=1 --with-gae --where="../tests/unit" --gae-application="../app"