2015-09-07 2 views
0

Я использую Ubuntu 14.04. У меня есть сценарий, который зависит от pynotify. Когда сценарий запускается за пределами любой виртуальной среды, он работает нормально (другие зависимости также установлены в глобальном масштабе), но если я запускаю один и тот же скрипт внутри любой виртуальной среды (там также установлены другие зависимости), это не сработает.
Тогда я думал, что я бы установил его на глобальном уровне раньше, но это не так. Я пробовал это (глобально):Не удалось импортировать pynotify в virtualenv

pip freeze | grep pynotify 

Но, это не дало результата. Есть ли объяснения этому поведению?

ответ

1

обновления среда virtualenv включить системы МЕСТА-пакеты:

mkvirtualenv --system-site-packages your_virtual_env_name 

Если вы строите с virtualenv --system-site-packages ENV, вашей виртуальной среды наследуют пакеты из /usr/lib/python2.7/site-packages (или где вашего глобального сайта -пакетов).

Это можно использовать, если у вас есть контроль над каталогом глобальных сайтов-пакетов , и вы хотите зависеть от пакетов там. Если вы хотите изолировать от глобальной системы, не используйте этот флаг.

Источник: https://virtualenv.pypa.io/en/latest/userguide.html#the-system-site-packages-option

+0

Он работает. Но, разве это не противоречит тому, что должен делать виртуальный рабочий? Он использует все, что было установлено в глобальном масштабе, и какая помощь делает он? Я имею в виду, что без вен мы можем сделать то же самое, не так ли? Обычно мы создаем файл 'requirements.txt', используя' pip freeze' и обмениваемся зависимостями с другими, но в этом случае он будет содержать много вещей, которые не имеют отношения к этому проекту. Есть ли способ включить только то, что имеет отношение к требованиям? –

+0

__ «Запуск virtualenv с опцией --no-site-packages не будет включать в себя пакеты, установленные во всем мире. Это может быть полезно для сохранения списка пакетов в случае, если ему нужно получить доступ позже. Это поведение по умолчанию для virtualenv 1.7 и более поздних версий. "__ Источник: http://docs.python-guide.org/en/latest/dev/virtualenvs/#other-notes –

+0

virtualenv по умолчанию предоставит вам чистую среду без установленных пакетов и не будет используйте ваши глобально установленные пакеты. Если вы хотите pynotify в своем проекте, идея состоит в том, чтобы явно и отдельно устанавливать pynotify в этом проекте в чистой среде с помощью pip, не используя глобальные пакеты, уже установленные в системе. –

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