2016-03-23 7 views
2

Я создал виртуальный окр питона с помощьюКак скопировать питон виртуального окр доступ к глобальным пакетам на другую машину

$ virtualenv --system-site-packages env 

Он отлично работает на машине, где я настроить виртуальный окр и я могу получить доступ все глобальные пакеты в моем скрипте.

Затем я скопировал этот виртуальный окр к другой машине, следуя этим steps-

  1. Создания виртуального окр перемещаемого на моей локальной машине $ virtualenv --relocatable env
  2. Копирования папки env к удаленной машине.
  3. Изменить env/bin/activate скрипт для изменения VIRTUAL_ENV пути на удаленной машине

С этим я могу получить доступ ко всем моим местным пакетам просто отлично. Но по какой-то причине он не может получить доступ к пакетам системного уровня. Пакет системного уровня, который я пытаюсь использовать, - psycopg2.

Однако что-то делать, как показано ниже на удаленной машине дает мне доступ к модулю

$ ln -s /usr/lib64/python2.7/dist-packages/psycopg2 $virtual_env/lib/python2.7/site-packages 

или

$ cp -R /usr/lib64/python2.7/dist-packages/psycopg2 $virtual_env/lib/python2.7/site-packages 

psycopg2 Есть ли способ, я могу получить эту работу без того, чтобы это сделать взломать? Как работает --system-site-packages? Из того, что я вижу, опция -system-site-packages не делает бумажную копию пакетов системного уровня виртуальным env. Значит, он устанавливает какую-то переменную пути в сценариях, которые я могу изменить и заставить это работать?

ответ

3

Вы не копируете virtualenvs, вы их воссоздаете. Они по умолчанию не переносятся на всех компьютерах, а не переносятся по папкам (если вы не укажете --relocatable).

pip freeze дает вам список установленных пакетов, сохранить этот список в файл (обычно называемый requirements.txt), скопируйте его на новую машину, создать virtualenv, включите его и запустить pip install -r requirements.txt


Кроме того, использование --system-site-packages редко является хорошей идеей. Если у вас не может быть компилятор на компьютере, просто установите заголовки разработки postgres (postgresql-dev или аналогичный пакет), а затем pip install psycopg2 внутри вашего virtualenv.

+0

Как уже упоминалось в моем вопросе, я уже использую --relocatable. Это делает большую часть переменных пути относительной, поэтому его переносимость. По какой-то причине моя фирма не поддерживает воссоздание виртуального env на разных серверах. Идея состоит в том, чтобы полный готовый env, рассказать об этом и развернуть его на разных серверах. В скрипте есть все, что нужно для выполнения на этом env. Но проблема возникает, когда я пытаюсь получить доступ к пакету системного уровня. Мой вопрос в том, как он работает внутри страны? Есть ли переменная пути, которую я могу изменить, и заставить это работать так, как мы делаем это для активации скрипта? –

+0

исправление выше - «В сценарии есть все, что нужно для выполнения на этом env». - «В env есть все необходимое для выполнения скрипта». Кроме того, я уже делаю все, что вы упомянули выше, для настройки виртуального env на моей локальной машине, например 'pip install -r requirements.txt'.Извините, но это не ответило на мой вопрос. –