Может ли virtualenv наследовать от другого?

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

Я должен учитывать случаи:

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

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

Как установить из локального кэша с помощью pip?, похоже, проблема с загрузкой пакетов, но я не думаю, что это связано с изменением sys.path,

Ответ 1

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

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

Итак, если у меня есть два virtualenv, ENV1 и ENV2, и я хочу, чтобы ENV2 обращался к пакетам в ENV1, тогда мне нужно:

  • активировать ENV2:

    workon ENV2

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

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

Вышеприведенное предполагает, что $WORKON_HOME - это расположение ваших виртуальных каталогов, и что вы используете python2.6, поэтому, очевидно, соответствующим образом настройте их.

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

Ответ 2

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

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