2012-05-10 6 views
11

Я хочу создать один virtualenv, используя другой в качестве отправной точки, это возможно?Может ли virtualenv наследовать от другого?

я должен использовать случаи в виду:

  1. Скажем, у меня есть два virtualenv один для производства и один для развития. Для среды разработки требуются те же пакеты, что и производственная среда, но для других требуются другие, которые мне не нужны в производственной среде. Я не хочу устанавливать общие пакеты дважды.

  2. Я хочу поэкспериментировать с версией разработки пакета, например matplotlib. Версия разработки пакета имеет те же требования, что и стабильная версия. Поэтому я создаю virtualenv под названием matplotib_stable и устанавливаю требования и стабильную версию. Затем я создаю второй virtualenv под названием matplotlib_dev и использую matplotlib_stable в качестве отправной точки (для требований matplotlib), но затем я устанавливаю версию для разработки.

How do I install from a local cache with pip? кажется, решить проблему загрузки пакетов, но я не думаю, что он имеет дело с модифицирующими sys.path.

ответ

12

Одним из решений является использование команды virtualenvwrapperadd2virtualenv. Этот

Добавляет указанные каталоги в путь Python для активного виртуального виртуального оператора .

Так что, если у меня есть два virtualenv, ENV1 и ENV2, и я хочу ENV2 для доступа к пакетам в ENV1, то мне нужно:

  1. активировать ENV2:

    workon ENV2

  2. добавить ENV1 сайт-пакет s каталога с помощью add2virtualenv:

    add2virtualenv $WORKON_HOME/ENV1/lib/python2.6/site-packages

выше предполагает $WORKON_HOME является расположение ваших virtualenv каталогов, и что вы используете python2.6, поэтому, очевидно, корректировать те, соответственно.

Хотя это обеспечивает доступ к пакетам, оно не регулирует путь оболочки. Другими словами, сценарии, установленные в каталоге bin, недоступны с помощью этого метода.

+0

Когда я установил тот же пакет с различными версиями на обоих virtualenvs, я узнал, что за пределами окр (ENV1) принимает приоритет над внутренний env (ENV2). Похоже, что add2virtualenv помещает свои пути ранее в список импорта sys.path. Простое решение состоит в том, чтобы следовать приведенной выше команде с этим: 'add2virtualenv $ WORKON_HOME/ENV2/lib/python2.6/site-packages', а затем он работает как шарм. – Yonatan

+0

@Yann Спасибо Yann! Я устанавливаю pylint в ENV1, затем 'add2virtualenv $ WORKON_HOME/ENV1/lib/python3.4/site-packages', но pylint не работает! – HelloNewWorld

+1

@HelloNewWorld Я не использовал 'virtualenv' и' vertualenvwrapper' через некоторое время, почему бы не опубликовать новый вопрос об этой проблеме? – Yann

-1

Следующие, похоже, работают для меня. Предположим, что старая виртуальная среда, которую вы хотите наследовать, называется old.Так как вы можете указать, какую версию питона использовать при создании новой среды, просто сделать:

virtualenv -p path_to_venvs/old/bin/python --system-site-packages new_env 
+0

К сожалению, вы не можете наследовать virtualenvs таким образом. Обратите внимание на сообщение на выходе вашей команды: ** Использование базового префикса '/ usr' ** – allprog

+0

Хм, вы правы, я получаю это сообщение. Однако для всех практических целей он по-прежнему работает для меня - я могу импортировать пакеты из старого virtualenv, используя новый. Я исследую это! – Lisa

+0

Вы уверены, что используете старый env? Установите то, что у вас нет в системе, и попробуйте импортировать его. – allprog

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