Есть ли способ обновить версию python, используемую в virtualenv (например, если выходит версия с исправлением ошибок)?
Я мог бы pip freeze --local > requirements.txt
затем удалить каталог и pip install -r requirements.txt
, но это требует много переустановки больших библиотек, например numpy
, которые я часто использую.
Я вижу, что это преимущество при обновлении, например, с 2.6 -> 2.7, но как насчет 2.7.x -> 2.7.y?
python
version
virtualenv
pip
Саймон Уолкер
источник
источник
Ответы:
Вы видели это ? Если я не понял этого ответа неправильно, вы можете попытаться создать новый virtualenv поверх старого. Вам просто нужно знать, какой Python будет использовать ваш virtualenv (вам нужно будет увидеть свою версию virtualenv).
Если ваш virtualenv установлен с той же версией Python, что и старая, и обновление вашего пакета virtualenv не является вариантом, вы можете прочитать это , чтобы установить virtualenv с нужной вам версией python.
РЕДАКТИРОВАТЬ
Я протестировал этот подход (тот, который создает новый virtualenv поверх старого), и он отлично работал для меня. Я думаю, у вас могут возникнуть некоторые проблемы, если вы перейдете с Python 2.6 на 2.7 или 2.7 на 3.x, но если вы просто обновитесь в той же версии (оставаясь на уровне 2.7, как хотите), у вас не должно возникнуть никаких проблем, так как все пакеты содержатся в одних и тех же папках для обеих версий Python (пакеты 2.7.x и 2.7.y находятся внутри your_env / lib / python2.7 /).
Если вы измените версию Python virtualenv, вам нужно будет снова установить все пакеты для этой версии (или просто связать нужные пакеты в папку пакетов новой версии, т.е. your_env / lib / python_newversion / site-packages)
источник
virtualenv
поверх старой, и сделал работу. Я должен был указать,-p
чтобы указать на правильную версию Python.Если вы используете модуль venv, который поставляется с Python 3.3+, он поддерживает
--upgrade
опцию. Согласно документам :источник
venv
и отказались исправить это на том основании, что «вы можете просто использовать virtualenv». РЕДАКТИРОВАТЬ: на самом деле, это работает! Он также показывает сообщение об ошибке «surepip».python3.6 -m venv --upgrade <path_of_existing_env>
bin/python
иbin/python3
до сих пор связаны старыеpython3.4
двоичные файлы, и мне пришлось устанавливать ссылки вручную. Кроме того, есть ли способ удалить устаревшую версию Python?Error: Command '['/Users/me/Sites/site/venv3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
> что это значит? Я не вижу активных процессов Python, не могу обновить.python3.6 -m venv --upgrade ENV_DIR
для его работы. Я думаю, что мне все еще придется обновить некоторые символические ссылки вENV_DIR/bin
. Следовательно, хитрость заключалась в том, чтобы обновить новую версию Python, пока старая версия все еще была установлена.Обновление снова: следующий метод может не работать в более новых версиях virtualenv. Прежде чем пытаться внести изменения в старый virtualenv, вы должны сохранить зависимости в файле требований (
pip freeze > requirements.txt
) и создать его резервную копию в другом месте. Если что-то пойдет не так, вы все равно можете создать новый virtualenv и установить в него старые зависимости (pip install -r requirements.txt
).Обновлено: я изменил ответ через 5 месяцев после первоначального ответа. Следующий метод является более удобным и надежным.
Побочный эффект: он также исправляет
Symbol not found: _SSLv2_method
исключение, когда вы делаете этоimport ssl
в виртуальной среде после обновления Python до v2.7.8.Примечание: В настоящее время, это только 2.7.x Python .
Если вы используете Homebrew Python на OS X, сначала
deactivate
все virtualenv, а затем обновите Python:Выполните следующие команды (
<EXISTING_ENV_PATH>
это путь к вашей виртуальной среде):Наконец, заново создайте свою виртуальную среду:
При этом старые файлы ядра Python и стандартные библиотеки (плюс
setuptools
иpip
) удаляются, а пользовательские библиотеки устанавливаются вsite-packages
них сохраняются и работают, как только они находятся на чистом Python. Двоичные библиотеки могут или не должны быть переустановлены для правильной работы.Это сработало для меня в 5 виртуальных средах с установленным Django.
Кстати, если
./manage.py compilemessages
после этого не работает, попробуйте это:источник
bin/python
файл.setuptools
иpip
необходимо.<EXISTING_ENV_PATH>/.Python
поскольку это сломало создание virtualenv.rmvirtualenv <env_name>
и удалит все выстроенные зависимости :) См. Больше на: virtualenvwrapper.readthedocs.io/en/latest/…Я не смог создать новый virtualenv поверх старого. Но в pip есть инструменты, которые позволяют намного быстрее переустанавливать требования в совершенно новую версию. Pip может встроить каждый из элементов вашего needs.txt в пакет wheel и сохранить его в локальном кэше. Когда вы создаете новый venv и запускаете в нем установку pip, pip будет автоматически использовать предварительно собранные колеса, если найдет их. Колеса устанавливаются намного быстрее, чем запуск setup.py для каждого модуля.
Мой ~ / .pip / pip.conf выглядит так:
Я устанавливаю колесо (
pip install wheel
), затем запускаюpip wheel -r requirements.txt
. Это сохраняет встроенные колеса в директории wheel в моем pip.conf.С тех пор каждый раз, когда я устанавливаю любое из этих требований, он устанавливает их с колес, что довольно быстро.
источник
Как обновить версию Python для существующего проекта virtualenvwrapper и сохранить то же имя
Я добавляю ответ для всех, кто использует превосходный virtualenvwrapper Дага Хеллмана поскольку существующие ответы не сделали этого для меня.
Некоторый контекст:
python3 -m venv
, он не поддерживает среды Python 2mkproject
который создает виртуальную среду, создает пустой каталог проекта и вставляет в него компакт-дискиworkon
команду virtualenvwrapper для активации любого проекта независимо от версии PythonНаправления:
Допустим, ваш существующий проект назван
foo
и в настоящее время работает на Python 2 (mkproject -p python2 foo
), хотя команды одинаковы, будь то обновление с 2.x до 3.x, 3.6.0 до 3.6.1 и т. Д. Я также предполагаю, что вы ' В настоящее время внутри активированной виртуальной среды.1. Отключите и удалите старую виртуальную среду:
Обратите внимание, что если вы добавили какие-либо пользовательские команды в хуки (например,
bin/postactivate
), вам необходимо сохранить их перед удалением среды.2. Сохраните реальный проект во временную директорию:
3. Создайте новую виртуальную среду (и каталог проекта) и активируйте:
4. Замените пустой сгенерированный каталог проекта реальным проектом, вернитесь обратно в каталог проекта:
5. Переустановите зависимости, подтвердите новую версию Python и т.д .:
Если это общий случай использования, я рассмотрю возможность открытия PR, чтобы добавить что-то вроде
$ upgradevirtualenv
/$ upgradeproject
в virtualenvwrapper.источник
Этот подход всегда работает для меня:
Взято из:
источник
Я переместил свой домашний каталог с одного компьютера на другой (Маунтин-Лев в Йосемити) и не понимал, что такое сломанный виртуал, пока не потерял старый ноутбук. У меня был пункт virtualenv для Python 2.7, установленный
brew
и с тех пор, как Yosemite вышел с Python 2.7, я хотел обновить virtualenv до системного python. Когда я работалvirtualenv
поверх существующего каталога, я получалOSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config'
ошибку. Методом проб и ошибок я решил эту проблему, удалив несколько ссылок и исправив несколько вручную. Вот что я наконец-то сделал (похоже на то, что сделал @Rockalite, но проще):После этого я смог просто запустить virtualenv поверх существующего каталога.
источник
На OS X или macOS с использованием Homebrew для установки и обновления Python3 мне пришлось удалить символические ссылки перед
python -m venv --upgrade ENV_DIR
сработает.Я сохранил следующее в upgrade_python3.sh, чтобы помнить, сколько месяцев спустя мне нужно будет сделать это снова:
ОБНОВЛЕНИЕ: хотя сначала казалось, что это работает хорошо, когда я запускал py.test, он выдал ошибку. В итоге я просто заново создал среду из файла требований.
источник
py.test
не работает, потому что ~ / .virtualenvs / myenv / bin / python3.7 не является символической ссылкой, поэтому не обновляется.~/.virtualenvs/myenv/.Python
что есть символическая ссылка.Если вы используете
pipenv
, я не знаю, возможно ли обновить среду на месте, но, по крайней мере, для незначительных обновлений версий она кажется достаточно умной, чтобы не перестраивать пакеты с нуля, когда она создает новую среду. Например, от 3.6.4 до 3.6.5:источник
Я просто хочу уточнить, потому что некоторые ответы относятся,
venv
а другие относятсяvirtualenv
.Использование флага
-p
or--python
поддерживаетсяvirtualenv
, но не включеноvenv
. Если у вас более одной версии Python и вы хотите указать, какую из них создаватьvenv
, выполните это в командной строке, например:Конечно, вы можете обновить с помощью,
venv
как указали другие, но это предполагает, что вы уже обновили Python, который использовался для его созданияvenv
. Вы не можете перейти на версию Python, которой у вас еще нет в вашей системе, поэтому сначала убедитесь, что вы получили нужную версию, а затем сделайте из нее все необходимые версии.источник
Шаг 1: заморозить требование и сделать резервную копию существующего env
Шаг 2. Установите Python 3.7 и активируйте виртуальную среду.
Шаг 3. Установите требования
источник
Для всех с проблемой
Вы должны установить python3.6-venv
источник