У меня есть virtualenv с большим количеством пакетов, но старая версия Django.
Я хочу продублировать эту среду, чтобы у меня была другая среда с точно такими же пакетами , но более новой версией Django. Как я могу это сделать?
У меня есть virtualenv с большим количеством пакетов, но старая версия Django.
Я хочу продублировать эту среду, чтобы у меня была другая среда с точно такими же пакетами , но более новой версией Django. Как я могу это сделать?
Самый простой способ - использовать pip для создания файла требований. Файл требований - это в основном файл, содержащий список всех пакетов python, которые вы хотите установить (или уже были установлены в случае файла, созданного pip), и их версий.
Чтобы создать файл требований, войдите в исходный файл virtualenv и запустите:
pip freeze > requirements.txt
Это сгенерирует для вас файл requirements.txt. Если вы откроете этот файл в своем любимом текстовом редакторе, вы увидите что-то вроде:
Django==1.3
Fabric==1.0.1
etc...
Теперь отредактируйте строку, которая говорит Django==x.x
, чтобы сказать Django==1.3
(или любую другую версию, которую вы хотите установить в своем новом virtualenv).
Наконец, активируйте свой новый virtualenv и запустите:
pip install -r requirements.txt
И pip автоматически загрузит и установит все модули python, перечисленные в вашем файле requirements.txt, в любых версиях, которые вы указали!
Could not find a version that satisfies the requirement a_package=#.#.#
Могу ли я легко решить эту проблему? Я удалил строчку или заменил равенство на неравенство.
- person Change-the-world; 02.04.2018
pyenv
. Отличный ответ.
- person Leonard; 12.01.2020
Другой вариант - использовать пакет virtualenv-clone
:
Скрипт для клонирования не перемещаемого файла virtualenv.
virtualenv-clone
после активации virtualenv
- person 4givN; 09.12.2019
python -m clonevirtualenv source/ target/
- person Georg W.; 18.12.2020
virtualenvwrapper
предоставляет команду для дублирования virtualenv
cpvirtualenv ENVNAME [TARGETENVNAME]
Если вы используете Anaconda, вы можете просто запустить:
conda create --name myclone --clone myenv
Это скопирует myenv
во вновь созданную среду с именем myclone
.
Самый простой вариант - использовать пакет virtualenv-clone
.
Чтобы скопировать venv1
в venv2
, выполните следующие действия:
Установите virtualenv-clone
либо в venv1
, либо в фиктивную виртуальную среду venv_dummy
. Чтобы создать venv_dummy
:
python -m virtualenv venv_dummy
source venv_dummy/bin/activate
Чтобы установить virtualenv-clone
:
(venv_dummy): pip install virtualenv-clone
Чтобы скопировать venv1
в venv2
:
(venv_dummy): virtualenv-clone venv1/ venv2/
bin/activate
, если вы последуете этому ответу. Зачем нужно редактировать bin/activate
?
- person Safwan; 15.06.2020
bin/activate
- person MrR; 15.06.2020
bin/activate
, найдите старое имя env и установите новое имя. Вуаля! Переименовать нужно будет 2 раза. Удачи!!
- person Sachin Mohan; 08.01.2021
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
с этого
- person MrR; 10.01.2021
Вот моя команда для клонирования виртуальных сред Python.
packs=`source-path/bin/pip freeze` && python3 -m venv <env-name> && target-path/bin/pip install $packs
Условные обозначения, используемые в приведенной выше команде:
/home/john/envs/oldenv
.myenv
, это также может быть путь, например /home/john/envs/myenv
/home/john/envs/<env-name>
Преимущества использования этого или почему я предпочитаю это
В некоторых случаях вы можете захотеть исключить глобальные пакеты из при клонировании env, вы можете заменить source-path/bin/pip freeze
на source-path/bin/pip freeze --local
, подробнее о --local
здесь
Можно не просто:
Если вы используете pip venv. Я копирую вставленную папку, содержащую виртуальную среду, и вручную меняю файлы в папке bin скопированной папки. Не знаю, эффективно ли это, но работает!
virtualenv -p /path/to/older/venv/bin/python new_venv
, а затем использоватьrequirements.txt
, созданный послеpip freeze
- person GiriB   schedule 17.04.2017