Как мне заставить virtualenv предпочесть его локальные библиотеки глобальным библиотекам - PullRequest
22 голосов
/ 28 июня 2011

Мне нужно использовать 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 на моем компьютере не установлена.)

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

Ответы [ 3 ]

8 голосов
/ 07 июля 2011

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

which python

which pip

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

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

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

4 голосов
/ 19 февраля 2014

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

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

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

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

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

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

2 голосов
/ 24 ноября 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...