Чи можна витончено оновити існуючі virtualenv?


93

У мене є 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?

Відповіді:


62

Ви можете використовувати Python 2.6 virtualenv для "відновлення" існуючого каталогу. Вам доведеться перевстановити всі встановлені вами модулі. У мене часто є віртуальний каталог для розробки модуля, і virtualenv - той самий каталог із багатьма версіями Python, і він чудово працює. :)


1
Дякую! Я спробував ваш метод і бачу, що сценарій 'активувати' оновлено, але стара версія залишається (див. Оновлене запитання). Чи можете ви навести приклад?
Matt Norris

13
Ви можете просто видалити виконуваний файл bin / python у virtualenv перед повторним запуском virtualenv за допомогою python 2.6.
Carl Meyer

9
Ну, ви можете змусити це працювати - але чому? Великою привабливістю virtualenvє те, що він легко і дешево робить відтворювані середовища python. Чому блякатись з одним і не бути впевненим, що ви все виправили, чи можете відтворити це знову, або що ви порушуєте виробниче середовище, коли можете просто зробити нове чисте?
Нед Дейлі

9
@Ned: Virtualenv не робить відтворюваних середовищ, він робить ізольовані середовища. Для їх відтворення потрібно також встановити все однаково, для цього недостатньо virtualenv. zc.buildout там краще.
Леннарт Регебро

1
@Ned: Очко взято; це середовище розробки, в якому я працював. Я хотів зберегти його в 2.5, якщо мені не потрібно абсолютно робити 2.6. Ця потреба виникла, тому мені було цікаво, чи можете ви оновити ізольоване середовище, щоб побачити наслідки для вашого коду, без необхідності перебудовувати та копіювати / вставляти каталоги в нову env.
Matt Norris 02

19

У 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

Вам слід створити нову virtualenvза допомогою, python2.6а потім, після активації нової env, використовувати її python2.6та її easy_installдля встановлення нових версій будь-яких пакетів сайтів, які вам потрібні. Пам'ятайте, що ім'я шляху до virtualenvфайлу з'єднане з різними файлами в оточенні, тому, коли ви готові перейти до нього, або змініть сценарії запуску та ін., Щоб посилатися на новий virualenvшлях, або будьте дуже обережні, копіюючи його до старий каталог та модифікація імен шляхів усередині нього.


3

Встановіть другий Python на CentOS

  1. завантажити python - -
  2. встановити в diff local

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

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

    Примітка: за потреби це можна зробити з іншим користувачем

    chown pyuser -R /opt/virtualenv
    su - pyuser
    source /opt/virtualenv/bin/activate
    python -v
  4. Створити віртуальну env:

    virtualenv /opt/virtualenv
    su - infograficos
    source bin/activate
  5. Встановіть pip з python 2.7 (всередині virtualenv)

    easy_install pip 

0

Якщо ви використовуєте OS X, спробуйте це, якщо хочете оновити Python до незначно збільшеної версії (наприклад, 2.7.6 - 2.7.8), зберігаючи при цьому сторонні бібліотеки.

Для мене це працює в 5 різних віртуальних середовищах із встановленим Django.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.