Почему sys.path показывает несуществующие элементы (которые вызывают проблемы с импортом)? - PullRequest
1 голос
/ 26 мая 2010

Я вижу некоторые дополнительные элементы в sys.path, которые 1) не существуют и 2) вызывают проблемы с импортом (особенно с Nose).

По сути, я создал пакет (назовем его foo), который я использую в нескольких проектах. Проект, над которым я сейчас работаю, может импортировать все из foo без проблем, но когда я запускаю Nose, я получаю ошибки импорта:

E
======================================================================
ERROR: Failure: ImportError (No module named foo)
----------------------------------------------------------------------
Traceback (most recent call last):
  ...
  File "/path/to/my-project/file.py", line 6, in <module>
    from foo import *
ImportError: No module named foo

----------------------------------------------------------------------
Ran 1 test in 0.004s

FAILED (errors=1)

Когда я выкладываю путь, я получаю:

["/path/to/my-project/foo", 
 "/path/to/my-project/foo", 
 ..., 
 "/usr/virtualenvs/my-project/lib/python2.6/site-packages/foo-py2.6.egg", 
 ...]

/path/to/my-project/foo не существует. Если я вытолкну первые 2 записи из sys.path, все будет нормально.

Может ли кто-нибудь объяснить мне, почему эти элементы появляются, когда, действительно, в списке должен быть только один элемент, установленный в virtualenv?

И как я могу предотвратить это в будущем? Это как-то связано с setup.py в foo?

Ответы [ 2 ]

0 голосов
/ 27 мая 2010

Ищите .pth файлы в любом месте пути. Эти файлы (например, easy-install.pth) могут содержать дополнительные записи sys.path (по одному на строку).

0 голосов
/ 26 мая 2010

У вас есть что-нибудь в $PYTHONPATH? Это поместит записи в sys.path даже в среде virtualenv.

Попробуйте unset PYTHONPATH в bash (если вы используете bash), а затем посмотрите, что содержит ваш sys.path.

...