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

1 投票
2 回答
1546 浏览
提问于 2025-04-16 05:35

我有一系列的单元测试,使用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')

如果 nosesys.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" 

撰写回答