Можно ли изящно обновить существующий virtualenv?

96

У меня есть virtualenv, созданный для Python 2.5, и я хочу «обновить» его до Python 2.6.

Вот как это было изначально настроено:

virtualenv --no-site-packages -p python2.5 myenv

Теперь я запускаю virtualenv в том же каталоге для обновления:

virtualenv --no-site-packages -p python2.6 myenv
...
Not overwriting existing python script myenv/bin/python (you must use myenv/bin/python2.6)
...
Overwriting myenv/bin/activate with new content

Python по умолчанию по-прежнему 2.5, хотя я также могу указать 2.6. Есть ли способ полностью удалить 2.5 и вместо этого указать bin / python на 2.6?

Мэтт Норрис
источник

Ответы:

64

Вы можете использовать виртуальную среду Python 2.6 для «обновления» существующего каталога. Однако вам придется переустановить все установленные вами модули. У меня часто есть виртуальный каталог для разработки модуля и virtualenv тот же каталог со многими версиями Python, и он отлично работает. :)

Леннарт Регебро
источник
1
Благодарность! Я попробовал ваш метод и увидел, что скрипт активации обновлен, но старая версия осталась (см. Измененный вопрос). Вы можете привести пример?
Мэтт Норрис
13
вы можете просто удалить исполняемый файл bin / python в virtualenv перед повторным запуском virtualenv с python 2.6.
Карл Мейер
9
Что ж, вы можете заставить это работать - но почему? Большая привлекательность virtualenvзаключается в том, что он легко и дешево создает воспроизводимые среды Python. Зачем гадить с одним и не быть уверенным, что вы все исправили, или что вы можете воспроизвести его снова, или что вы мешаете своей производственной среде, когда вы можете просто создать новую, чистую?
Нед Дейли
9
@Ned: Virtualenv не создает воспроизводимые среды, а создает изолированные среды. Чтобы воспроизвести их, вам также нужно установить все таким же образом, virtualenv для этого недостаточно. zc.buildout там лучше.
Леннарт Регебро
1
@Ned: точка взята; это среда разработки, в которой я работал. Я хотел оставить ее в версии 2.5, если мне не нужно было делать 2.6. Эта потребность возникла, поэтому мне было любопытно, можете ли вы обновить изолированную среду, чтобы увидеть влияние на ваш код, без необходимости перестраивать и копировать / вставлять каталоги в новую среду.
Мэтт Норрис
25

В Python 3.3+ venv поддерживает флаг --upgrade

  --upgrade             Upgrade the environment directory to use this version
                        of Python, assuming Python has been upgraded in-place.

Применение:

python -m venv --upgrade YOUR_VENV_DIRECTORY

Я просто обновил свой venv с Python 3.7.x до 3.8 в нескольких проектах без каких-либо проблем.

Влад Безден
источник
1
«при условии , Python был обновлен на месте» ... к сожалению , это , кажется, означает , что , если моя система python3указывает на 3.6, я не могу создать попасть python3в точку до 3,7 в моем venv
Joel
4

Вы должны создать новый virtualenvusing, python2.6а затем, после активации нового env, использовать его python2.6и его easy_installдля установки новых версий любых пакетов сайта, которые вам нужны. Помните, что имя пути к файлу virtualenvжестко привязано к различным файлам в среде, поэтому, когда вы будете готовы переключиться на него, либо измените свои сценарии запуска и др., Чтобы они ссылались на новый virualenvпуть, либо будьте очень осторожны при копировании его на старый каталог и изменение имен путей внутри него.

Нед Дейли
источник
3

Установите второй Python на CentOS

  1. скачать питон
  2. установить, чтобы различать локальные

    configure --prefix=/opt/virtualenv/python 
    make && make install
    
  3. создать виртуальную среду с использованием нового Python

    virtualenv /opt/virtualenv --python=/opt/python276/bin/python
    

    примечание: при необходимости это можно сделать с другим пользователем

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
    
  4. Создать виртуальную среду:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
    
  5. Установите pip с помощью python 2.7 (внутри virtualenv)

    easy_install pip 
    
Xoroz
источник
0

Если вы используете OS X, попробуйте это, если вы хотите обновить Python до незначительно увеличенной версии (например, с 2.7.6 до 2.7.8), сохранив при этом работу сторонних библиотек.

Он работает для меня в 5 разных виртуальных средах с установленным Django.

Рокаллит
источник