Как продублировать virtualenv

105

У меня есть существующая среда в virtualenv, с большим количеством пакетов, но с старой версией Django.

Что делать, если я хочу дублировать эту среду,
поэтому у меня может быть другая среда, в которой я могу установить новую версию Django, но сохраняя все пакеты, которые уже находятся в другой среде?

  • 3
    Я бы заморозил все ваши требования в файл 'needs.txt' и создал бы другой virtualenv и запустил pip install needs.txt
  • 0
    Если версия Python виртуальной среды, которую вы хотите скопировать, отличается от вашей среды Python по умолчанию, вы можете настроить новую среду как virtualenv -p /path/to/older/venv/bin/python new_venv и затем использовать requirements.txt который вы сгенерировали после pip freeze
Теги:
virtualenv

5 ответов

142
Лучший ответ

Самый простой способ - использовать pip для создания файла требований. Файл требований в основном представляет собой файл, содержащий список всех пакетов python, которые вы хотите установить (или уже установлен в случае файла, сгенерированного пипом), и в каких версиях он находится.

Чтобы создать файл требований, перейдите в свой первоначальный virtualenv и запустите:

pip freeze > requirements.txt

Это приведет к созданию файла requirements.txt для вас. Если вы откроете этот файл в своем любимом текстовом редакторе, вы увидите что-то вроде:

Django==1.3
Fabric==1.0.1
etc...

Теперь отредактируйте строку с надписью Django==x.x, чтобы сказать Django==1.3 (или любую другую версию, которую вы хотите установить в новом виртуальном каталоге).

Наконец, активируйте свой новый virtualenv и запустите:

pip install -r requirements.txt

И pip автоматически загрузит и установит все модули python, перечисленные в файле requirements.txt, в любых версиях, которые вы указали!

  • 1
    Спасибо! При поиске в Интернете я нашла так много шумных, грязных и запутанных страниц ... Ваше решение настолько чистое и простое ... оно сделало мой день;)
  • 0
    что если я скопирую папку и вставлю ее на другой компьютер? Это будет работать? Предполагая, конечно, зависимости apt-get были разрешены
Показать ещё 3 комментария
22

Другой вариант - использовать virtualenv-clone пакет:

A script для клонирования неперемещаемого virtualenv.

  • 0
    Привет, я прав, предполагая, что это позволяет мне скопировать всю среду Python в файл. Тогда мне просто нужно загрузить этот файл на новый компьютер / ОС, и я получу обратно все пакеты моего сайта.
  • 1
    "virtualenv-clone source / target /" работал как шарм, спасибо!
11

virtualenvwrapper предоставляет команду для дублирования virtualenv

cpvirtualenv ENVNAME [TARGETENVNAME]
  • 5
    Не очень хорошая идея. «Копирование виртуальных сред не поддерживается должным образом. Каждый virtualenv жестко запрограммирован в информацию о пути, и могут быть случаи, когда код копии не знает, что ему нужно обновить определенный файл. Используйте с осторожностью».
1

Если вы используете Anaconda, вы можете просто запустить:

conda create --name myclone --clone myenv

Это скопирует myenv во вновь созданную среду под названием myclone.

1

Не можете ли вы просто:

  • Скопировать существующий каталог виртуального env в новый
  • Обновить до нового Django?
  • 6
    Иногда я использую этот подход, но есть неудобство, связанное с необходимостью обновления некоторых путей внутри скрипта bin / activ.
  • 3
    Является ли изменение простым поиском и заменой в ссылках на имя env, или это сложнее?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню