Подтвердить что ты не робот

Как мне получить virtualenv, чтобы предпочесть его локальные библиотеки по глобальным библиотекам

Мне нужно использовать python на большом сервере, где у меня нет доступа root. Я хочу использовать более новую версию numpy, чем тот, который установлен на глобальном уровне на машине. 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-site-packages, например:

virtualenv --no-site-packages my_personal_python

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

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

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

4b9b3361

Ответ 1

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

which python

which pip

Теперь, когда вы уверены, что используете правильную, запустите python и:

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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