Почему тесты носа не могут найти элементы в sys.path?

У меня есть серия юнит-тестов с носом. Для некоторых моих тестов я хотел бы удалить путь модуля из sys.path так что нет конфликта с тем, что я тестирую.

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

Если я запускаю интерпретатор Python и вызываю sys.path, '/path/to/remove/from/sys/path' есть в списке. Однако, когда вызывается проверка носа, приведенный выше код не может найти ее и выдает ошибку "not found in list".

Почему нос не может найти путь в sys.path?

2 ответа

Решение

Создайте скрипт 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, который вызывает тестирование носа.

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

Разве ты не имел в виду это?

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

Если нос не может найти его в sys.path тогда его там не было... sys.path сам по себе. Почему бы не распечатать sys.path и посмотреть, что это на самом деле, когда бегать под носом

Другие вопросы по тегам