2011-06-28 1 views
19

Мне нужно использовать python на большом сервере, где у меня нет доступа root. Я хочу использовать более новую версию numpy, чем тот, который установлен на глобальном уровне на машине. virtualenv предназначен именно для этой цели, и я создаю свою виртуальную среду и активировать его с помощью следующих команд:Как получить virtualenv, чтобы предпочесть его локальные библиотеки по глобальным библиотекам

virtualenv my_personal_python 
source my_personal_python/bin/activate 

я установить новую версию библиотеки, что я заинтересован в использовании

pip install numpy==1.6.0 

Проблема в том, что когда я импортирую numpy, он по-прежнему импортирует устаревшую глобальную версию, а не ту, которая установлена ​​в каталоге my_personal_python/lib/python2.6/site-packacges виртуальной среды.

Я уже знал одно из возможных решений, тем --no-сайт-пакеты флаг, как в:

virtualenv --no-site-packages my_personal_python 

Когда я использую этот флаг, то импорт ведет себя, как я хочу. Но я не хочу использовать этот флаг, потому что я не хочу повторно устанавливать все пакеты локально, я просто хочу переопределить пару из них.

(Я использую Python 2.6, virtualenv 1.6.1, а переменная PYTHONPATH на моей машине не установлен.)

Update Даже если я добавить каталог сайтов-пакеты из виртуальной среды в начало пути python, numpy не импортируется из этого местоположения (хотя другие пакеты импортируются из этого местоположения). Возможно, эта проблема специфична для numpy и не возникает с пакетами в целом.

+0

AFAIK, он должен работать так, как вы ожидаете. Может быть, это ошибка в старой версии virtualenv, которая предположительно установлена ​​на этом компьютере ... –

+0

не уверен, что это проблема, но знает ли протокол об использовании активированной виртуальной среды? Проверьте и проверьте, установлено ли numpy 1.6.0 в ваших глобальных пакетах сайтов. – mklauber

+0

pip знает, как использовать виртуальную среду, и правильно установил версию 1.6.0 в каталог сайта-пакетов виртуальной среды. Глобальная версия numpy - 1.4.0. – conradlee

ответ

7

Дважды проверьте несколько вещей.

which python

which pip

Теперь, когда вы уверены, что вы работаете в правильной, начать питон и:

import sys 
print "\n".join(sys.path) 

Затем выйти из питона и введите echo $PATH следует echo $PYTHONPATH Я подозреваю, что проблема будет видна, и если вы не можете исправить ее, установив PYTHONPATH, тогда вы можете сделать это с помощью site.

3

Это сработало для меня.

Мои which python и which pip были точными, но неверный sys.path. Мой virtualenv находится в ~/virtualenvs/envy. Первоначально я делал:

export PYTHONPATH=~/virtualenvs/envy/lib/python2.7/site-packages:$PYTHONPATH 

но это все еще импортировало общесистемный пакет вместо моего виртуального. НО я смотрел this PyCon talk on virtualenv и решил попробовать:

export PYTHONPATH=~/virtualenvs/envy/lib/python2.7:$PYTHONPATH 

Обратите внимание на отсутствие site-packages во втором варианте. И это действительно сработало! Надеюсь, это поможет кому-то другому.

1

Еще одно решение этой проблемы (по крайней мере, помогло мне): В моем ~/.local/lib/python2.7/site-packages/easy-install.pth были (ненужные) IMHO-линии, такие как /usr/lib/python2.7/dist-packages. Удаление этих строк помогло, может быть, они остались с гораздо более старыми временами, когда easy_install все еще делал что-то странное.