Как venv поменять версию питон
Перейти к содержимому

Как venv поменять версию питон

  • автор:

Можно ли в уже созданной virtualenv поменять версию Python?

Можно ли в уже созданной virtualenv поменять версию Python?

для каждого проекта используют отдельное v-окружение ( virtualenv )
но по причине устаревания Openssl приходится менять Python( установленный сразу с Openssl)

в созданых виртуалках же остается старая версия Python
как поступить?

  • Вопрос задан более трёх лет назад
  • 689 просмотров

1 комментарий

Средний 1 комментарий

Как в проекте менять версии Python внутри venv (на Windows 10)

у меня Windows 10. Я не использую среду разработки PyCharm. Я использую блокнот Jupyter Notebook. (1) Сначала я просто скачал с официального сайта инсталлятор python-3.8.10-amd64.exe и установил его обычным способом: введите сюда описание изображения В итоге Питон установился куда я и просил: введите сюда описание изображения (2) Далее я создаю папку test1 для своего проекта и перехожу в неё в командной строке:

cd C:\Users\alexw\Desktop\test1 

И создаю тут виртуальное окружение:

C:\Users\alexw\Desktop\test1> python -m venv env 

в итоге в директории test1 вижу поддиректорию env Активирую окружение:

env\Scripts\activate 

введите сюда описание изображения

в результате в командной строке перед командой появляется надпись (env) (3) Проверяю версию Питон:

python --version => Python 3.8.10 (как и ожидалось) 

введите сюда описание изображения

(4) Далее ставлю любую нужную библиотеку, нужной версии (правильную команду смотрю на сайте pypi.org), например:

pip install requests==2.27.0 

введите сюда описание изображения

Смотрю версию командой pip list и убеждаюсь что она 2.27.0 (5) Далее например мне надо проверить на другой версии. Ставлю другую версию:

pip install requests==2.25.1 

введите сюда описание изображения

Убеждаюсь что версия поменялась: То есть, я так понял, в Питоне любая вновь установленная версия библиотеки «перезатирает» предыдущую версию в данном виртуальном окружении. Ну хорошо. Вроде понятно. Сейчас такая проблема: Мне теперь надо протестировать некие скрипты не просто на разных версиях библиотек, а еще и на разных версиях интерпретатора Питон. Например, в данный момент у меня в виртуальном окружении Питон 3.8.10 (см. пункт (3) ). А сейчас мне нужна версия Python 3.9.8. Причём мне в принципе не важно, что там глобально установлено, мне именно в моём текущем виртуальном окружении env это надо, чтобы я мог при желании менять версии интерпретатора Питон одной командой, как я сейчас меняю одной командой текущие версии библиотек. Подскажите плиз, как лучше сделать?

Python: установка virtualenv

Виртуальное окружение virtualenv — это инструмент, позволяющий создавать изолированные среды для отдельных проектов Python, решая тем самым проблему зависимостей и совместимости приложений разных версий. Подробнее о виртуальном окружении Python можно прочитать в официальной документации .

После установки virtualenv вы можете использовать pip для установки библиотек Python.

В зависимости от ваших задач установку можно выполнить в домашнюю директорию или в директорию конкретного сайта.

  • Версии Python
  • Установка в корень аккаунта
  • Установка в конкретный каталог
  • Использование PIP
    • Основные команды pip
    • Файл requirements.txt
    • Восстановление виртуального окружения с помощью requirements.txt
    • No module named ‘имя_модуля’
    • Target WSGI script ‘/путь/до/скрипта/index.wsgi’ cannot be loaded as Python module
    • DisallowedHost at / Invalid HTTP_HOST header
    • AttributeError: module ‘MySQLdb.constants.FIELD_TYPE’ has no attribute ‘JSON’
    • The SECRET_KEY setting must not be empty

    Версии Python

    По умолчанию на наших серверах доступны версии Python 2 и Python 3.6, но вы также можете использовать версию Python 3.5.

    Проверить версии Python на сервере можно с помощью команд:

    # Версии Python 2:
    python -V

    # Версии Python 3:
    python3 -V

    Версии Python обратно совместимы, то есть приложение, написанное на 3.6, скорее всего, будет работать под 3.7, и так далее. Однако не всегда код, написанный на новых версиях, будет корректно работать на старых версиях из-за возможного нового синтаксиса и функций языка. Также обратите внимание, что Python 2 и Python 3 несовместимы между собой.

    При создании виртуального окружения нужно использовать корректное имя интерпретатора, в зависимости от нужной вам версии Python:

    # Если требуется Python2:
    python virtualenv.pyz venv

    # Если требуется Python3.5:
    python3.5 virtualenv.pyz venv

    # Если требуется Python3.6:
    python3.6 virtualenv.pyz venv

    Таким образом, при выполнении команды:

    python3 virtualenv.pyz venv

    окружение будет содержать интерпретатор Python3. Если вам нужна версия 2, то необходимо вызывать python :

    python virtualenv.pyz venv

    Обратите внимание, что в виртуальном окружении доступна только та версия Python 3 , которая была выбрана при создании виртуального окружения. Например, запустить скрипт через Python 3.5 в виртуальном окружении, созданном через Python 3.6, не получится:

    (env) $ python3.5 --version
    Command 'python3.5' not found

    При этом Python 2 будет доступен:

    (env) $ python2 --version
    Python 2.7.17

    Проверить версию Python в созданном виртуальном окружении можно командой:

    (env) $ python --version
    Python 3.6.9

    Установка в корень аккаунта

    Установить одну из последних версий виртуального окружения в корень аккаунта можно по инструкции ниже.

    1. Скачать virtualenv , указав в команде нужную версию Python.
    wget https://bootstrap.pypa.io/virtualenv/X.X/virtualenv.pyz

    Например, для Python 3.6:

    wget https://bootstrap.pypa.io/virtualenv/3.6/virtualenv.pyz
    1. Создать виртуальное окружение, используя нужную версию Python . Например:
    # Если требуется Python3:
    python3 virtualenv.pyz venv

    # Если требуется Python2:
    python virtualenv.pyz venv

    При этом будет создана директория venv , из которой будет запускаться виртуальное окружение (имя директории можно задать любое).

    1. Активировать виртуальное окружение:
    source venv/bin/activate

    Далее вы можете приступить к установке библиотек с помощью pip . После отключить виртуальное окружение можно командой deactivate .

    Установка в конкретный каталог

    Если виртуальное окружение требуется для конкретного сайта , можно установить его в соответствующий каталог public_html :

    1. Перейти в нужный каталог (вместо u и user укажите первую букву логина и сам логин):
    cd /home/u/user/директория_сайта/public_html
    1. Скачать virtualenv , указав нужную версию Python:
    wget https://bootstrap.pypa.io/virtualenv/X.X/virtualenv.pyz

    Например, для Python 3.6:

    wget https://bootstrap.pypa.io/virtualenv/3.6/virtualenv.pyz
    1. Создать виртуальное окружение, используя нужную версию Python . Например:
    # Если требуется Python 3:
    python3 virtualenv.pyz venv

    # Если требуется Python 2:
    python virtualenv.pyz venv

    При этом будет создана директория venv, из которой будет запускаться виртуальное окружение (имя директории можно задать любое).

    1. Активировать виртуальное окружение (вместо u и user укажите первую букву логина и сам логин):
    source /home/u/user/директория_сайта/public_html/venv/bin/activate

    Далее вы можете приступить к установке библиотек с помощью pip . После отключить виртуальное окружение можно командой deactivate .

    Использование PIP

    PIP — система управления пакетами для установки и управления программными пакетами на Python.

    Основные команды pip

    # Установка пакета
    pip install имя_пакета

    # Обновление пакета
    pip install -U имя_пакета

    # Удаление пакета
    pip uninstall имя_пакета — удаление пакета

    # Вывод установленных пакетов
    pip freeze

    # Просмотр версии pip
    pip --version

    # Обновление pip
    pip install -U pip

    Файл requirements.txt

    Файл содержит вывод команды pip freeze и является списком зависимостей, которые необходимо установить в виртуальное окружение для работы приложения.

    Пример содержимого requirements.txt :

    asgiref==3.4.1
    Django==3.2.7
    pytz==2021.1
    sqlparse==0.4.2
    typing-extensions==3.10.0.2
    • Django — имя пакета;
    • 3.2.7 — версия пакета.

    Вместо обозначения == может встретиться >= , что означает версию равную или выше.

    Восстановление виртуального окружения с помощью requirements.txt

    С помощью requirements.txt можно выполнить рекурсивную установку пакетов. В этом случае нет необходимости устанавливать пакеты вручную.

    Выполнить установку можно командой:

    pip install -r requirements.txt

    Возможные ошибки

    No module named ‘имя_модуля’

    Ошибка сообщает о том, что импортируемый в коде модуль не установлен. Пример сообщения в логе об ошибке:

    plain.webtm.ru [Tue Jul 07 06:18:52 2020] [error] [pid 74988] src/server/wsgi_logger.c(147): [client 5.16.118.157:33342] import pygame
    plain.webtm.ru [Tue Jul 07 06:18:52 2020] [error] [pid 74988] src/server/wsgi_logger.c(147): [client 5.16.118.157:33342] ModuleNotFoundError: No module named 'pygame'

    Если вы уверены, что модуль установлен, но ошибка все равно возникает, необходимо проверить корректность путей в файле index.wsgi и указать в скрипте корректный путь до интерпретатора Python.

    Например, если виртуальное окружение было установлено в директорию /mysite/public_html , в начало скрипта необходимо добавить строку:

    #!/home/u/user/mysite/public_html/venv/bin/python3.6

    Также следует убедиться, что используется нужная версия пакетов или самого Python.

    Target WSGI script ‘/путь/до/скрипта/index.wsgi’ cannot be loaded as Python module

    Возникает при неправильной настройке файла index.wsgi .

    Необходимо сверить файл с инструкциями по ссылкам: Django , Flask .

    DisallowedHost at / Invalid HTTP_HOST header

    Для устранения ошибки необходимо указать доменное имя в качестве переменной в файле /имя_проекта/settings.py , например:

    ALLOWED_HOSTS = ['example.com']

    Для работы сайта от любого домена нужно указать символ * :

    ALLOWED_HOSTS = ['*']

    AttributeError: module ‘MySQLdb.constants.FIELD_TYPE’ has no attribute ‘JSON’

    Необходимо обновить mysqlclient командой:

    pip install -U mysqlclient

    The SECRET_KEY setting must not be empty

    Нужно проверить корректность указанного имени модуля настроек в wsgi-скрипте или наличие SECRET_KEY в файле settings.py .

    Пример сообщения об ошибке в логе:

    Jan 28 02:12:27 vh328 apache_error[58945]: ce05390-django.tw1.ru [Thu Jan 28 02:12:27 2021] [error] [pid 35894] src/server/wsgi_logger.c(147): [client 188.163.65.63:37230] django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

    Другая версия python в виртуальном окружении

    Всем ку!) Ситуация возникла следующая: в системе стоит python 3.5.3, и он не обновляется, потому что в репозитории stable это последняя версия, пусть так и остается. Но в виртуальное окружение хотел бы версию python 3.6.4. Возможно ли это сделать так, чтобы ничего не сломать в системе? Если да, то как это сделать грамотно?

    a-lexx
    11.01.18 12:44:51 MSK
    slaykovsky ★★★
    ( 11.01.18 12:46:38 MSK )

    Можно иметь несколько версий питона рядом без проблем.

    При создании virtualenv можно указать путь к любому интерпретатору, даже если он собран куда-нить в /opt

    pawnhearts ★★★★★
    ( 11.01.18 13:04:08 MSK )
    Ответ на: комментарий от pawnhearts 11.01.18 13:04:08 MSK

    a-lexx
    ( 11.01.18 13:35:23 MSK ) автор топика
    Ответ на: комментарий от a-lexx 11.01.18 13:35:23 MSK

    Я у себя на debian просто скомпилировал с —prefix=/opt/python36

    при создание venv указываешь интерпретатор оттуда

    pawnhearts ★★★★★
    ( 11.01.18 14:04:57 MSK )
    Ответ на: комментарий от pawnhearts 11.01.18 14:04:57 MSK

    Такой вопрос, а можно с помощью pip обновить сам питон?

    a-lexx
    ( 11.01.18 15:26:35 MSK ) автор топика
    Ответ на: комментарий от a-lexx 11.01.18 15:26:35 MSK

    не надо глупостями заниматься

    в дебиане есть два разных пакета: python3.5 и python3.6. Поставь оба, при этом python3 у тебя будет мапиться на python3.5, а для создания окружения с python3.6 указывай явно:

    virtualenv -p python3.6 ./venv/

    alpha ★★★★★
    ( 11.01.18 15:44:34 MSK )
    Ответ на: комментарий от alpha 11.01.18 15:44:34 MSK

    3.6 только в unstable и testing

    можно с помощью pip обновить сам питон

    pawnhearts ★★★★★
    ( 11.01.18 15:53:06 MSK )
    Последнее исправление: pawnhearts 11.01.18 15:54:35 MSK (всего исправлений: 1)

    Ответ на: комментарий от alpha 11.01.18 15:44:34 MSK

    Если я временно добавлю тестовый репозиторий в sources.list, не поставит ли система python 3.6 так, что затрет python 3.5?

    a-lexx
    ( 11.01.18 16:13:30 MSK ) автор топика
    Ответ на: комментарий от pawnhearts 11.01.18 14:04:57 MSK

    Я у себя на debian просто скомпилировал с —prefix=/opt/python36

    Сорцы где взяли? С зависимостями нормально все было?

    a-lexx
    ( 11.01.18 16:21:13 MSK ) автор топика
    Ответ на: комментарий от a-lexx 11.01.18 16:13:30 MSK

    теоретически нет, на практике я так делаю на fedora, а на debian не пробовала, возможны нюансы

    Судя по dpkg -L пожалуй лучше ставить python3.6-minimal, а не python3.6, так как он не содержит /usr/lib/python3 и прочих shared-файлов.

    # dpkg -L python3.5 /. /usr /usr/bin /usr/bin/2to3-3.5 /usr/bin/pydoc3.5 /usr/bin/pygettext3.5 /usr/lib /usr/lib/python3 /usr/lib/python3/dist-packages /usr/lib/python3.5 /usr/lib/python3.5/lib-dynload /usr/share /usr/share/applications /usr/share/applications/python3.5.desktop /usr/share/doc /usr/share/doc/python3.5 /usr/share/doc/python3.5/ACKS.gz /usr/share/doc/python3.5/NEWS.gz /usr/share/doc/python3.5/README.Debian /usr/share/doc/python3.5/README.gz /usr/share/doc/python3.5/changelog.Debian.gz /usr/share/doc/python3.5/copyright /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/python3.5 /usr/share/man /usr/share/man/man1 /usr/share/man/man1/2to3-3.5.1.gz /usr/share/man/man1/pdb3.5.1.gz /usr/share/man/man1/pydoc3.5.1.gz /usr/share/man/man1/pygettext3.5.1.gz /usr/share/man/man1/pysetup3.5.1.gz /usr/share/pixmaps /usr/share/pixmaps/python3.5.xpm /usr/bin/pdb3.5 /usr/share/doc/python3.5/changelog.gz 
    # dpkg -L python3.5-minimal /. /usr /usr/bin /usr/bin/python3.5 /usr/bin/python3.5m /usr/share /usr/share/binfmts /usr/share/binfmts/python3.5 /usr/share/doc /usr/share/doc/python3.5-minimal /usr/share/doc/python3.5-minimal/README.Debian /usr/share/doc/python3.5-minimal/changelog.Debian.gz /usr/share/doc/python3.5-minimal/copyright /usr/share/man /usr/share/man/man1 /usr/share/man/man1/python3.5.1.gz /usr/share/man/man1/python3.5m.1.gz 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *