Как в проекте менять версии 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 это надо, чтобы я мог при желании менять версии интерпретатора Питон одной командой, как я сейчас меняю одной командой текущие версии библиотек.

Подскажите плиз, как лучше сделать?


Ответы (3 шт):

Автор решения: Alpensin

Подскажу способ без привлечения разных дополнительных иснструментов, т.к. сам ими не пользуюсь. Можно посмотреть в сторону pyenv и poetry для этого.

Я бы делал так:

  1. Придется в любом случае установить в системе нужные версии интерпретаторов. Тут важно понимать что такое переменная среды PATH в Windows. PATH — это системная переменная, содержащая список директорий, в которых ОС будет искать исполняемый файл при вызове команды из консоли. Именно благодаря ей можно запустить интерпретатор, просто вбив python в консоли в любом месте.

В Windows 10 можно добраться до настройки PATH так: Этот компьютер → Свойства → Дополнительные параметры системы → Дополнительно → Переменные среды.

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

  1. Нужные зависимости можно устанавливать через файл requirements.txt.

Получить список установленных библиотек:

pip freeze > requirements.txt

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

pip install -r requirements.txt

А именно менять версии интерпретаторов для venv не выйдет. Во всяком случае я таких способов не знаю. Venv ссылается на интерпретатор и зависит от него.

→ Ссылка
Автор решения: NEKREIT

У меня похожая проблема, мне надо было поменять версию интерпретатора с 3.11.3 на 3.12.

для того, чтобы это сделать, достаточно заново ввести команду для создания venv в cmd:

python -m venv env

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

→ Ссылка
Автор решения: Konstantin Osipov

Использовать менеджер для интерпретаторов. в Windows Pyenv должен работать. https://pypi.org/project/pyenv-win/ "pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well."

→ Ссылка