2015-06-22 2 views
0

Я нахожусь на OSX и имею python virtualenv, настроенный через virtualfish под названием ds-mapreduce-env. С venv активируется в моем каталоге проекта, похоже, правильно pip и python выбраны:pip with virtualenv требует sudo

~/d/ds-mapreduce (venv) master ➜ which pip 
/Users/cody/.virtualenvs/ds-mapreduce-env/bin/pip 
~/d/ds-mapreduce (venv) master ➜ which python 
/Users/cody/.virtualenvs/ds-mapreduce-env/bin/python 

Но когда я бегу pip install он не устанавливает в виртуальной среде, как и ожидалось. Однако, когда я использую sudo, он делает это.

~/d/ds-mapreduce (venv) master ➜ pip install geonamescache 
Requirement already satisfied (use --upgrade to upgrade): geonamescache in /usr/local/lib/python2.7/site-packages 

~/d/ds-mapreduce (venv) master ➜ sudo pip install geonamescache 
The directory '/Users/cody/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. 
The directory '/Users/cody/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag. 
Collecting geonamescache 
Installing collected packages: geonamescache 
Successfully installed geonamescache-0.18 

Я предполагаю, что это какая-то проблема с разрешениями, но я не могу понять это. Я установил python с brew install python и virtualfish с pip install virtualfish. Я попытался удалить и снова установить без изменений.

мое решение

Моя проблема была с моей PYTHONPATH. У меня было /usr/local/lib/python2.7/site-packages, добавленное к моему PYTHONPATH. Исправлена ​​ошибка!

+0

Вы создали virtualenv как root? (имеет ли root собственную папку «/Users/cody/.virtualenvs/ds-mapreduce-env») –

+0

нет не как root: 'drwxr-xr-x 7 cody staff 238B Jun 22 12:23 ds-mapreduce-env' –

+0

Привет, Коди. Отвечает ли мой ответ на вашу проблему? –

ответ

1

Первым шагом является удаление глобально установленного пакета:

pip uninstall -y geonamescache 

Убедитесь, что она была полностью удалена путем проверки /usr/local/lib/python2.7/site-packages/. Если нет, вручную удалите любой связанный с ним детрит, который вы там найдете.

Следующий шаг - лучше изолировать виртуальные среды site-packages от вашего глобального site-packages. Добавьте следующие ~/.config/fish/config.fish:

set -x PIP_REQUIRE_VIRTUALENV "true" 

Если открыть новый сеанс терминала, теперь вы должны получить сообщение об ошибке при запуске pip install geonamescache без активированной виртуальной среды - которая является то, что мы хотим. Создайте и активируйте новую виртуальную среду через vf new ds-mapreduce-env и повторите попытку того же pip install geonamescache, и пакет должен быть установлен в виртуальную среду.

Поскольку это не позволит вам что-либо встраивать в ваш глобальный site-packages, вы можете настроить псевдоним, который позволяет переопределить эту изоляцию и выполнить глобальные операции pip. Добавьте следующую функцию ~/.config/fish/functions/gpip.fish:

function gpip -d "Manage globally-installed Python packages" 
    env PIP_REQUIRE_VIRTUALENV="" pip $argv 
end 

С, что на месте, вы можете (например) обновить глобальные пакеты с помощью:

gpip install --upgrade setuptools pip wheel virtualenv 

Большинство из вышеперечисленного уже адресуются через Tacklebox + Tackle (найдите плагин pip), которые представляют собой проекты, предназначенные для легкого добавления улучшений в вашу среду fish.

+0

Спасибо за ответ Джастин. Я не пробовал это решение, поскольку сам исправил проблему (см. Выше). –

+0

Понравился переключатель, чтобы ограничить пип на виртуальный. –

Смежные вопросы