Python venv: зависимость от версии ОС по умолчанию

Я хотел бы иметь несколько виртуальных сред, некоторые из которых имеют другую версию Python. Я не уверен в базовой версии Python, которую мне следует использовать. Например, если я создаю venv зависимые виртуальные среды с использованием Python, предоставляемого моей текущей ОС Ubuntu, скажем, 3.8, а позже я обновляю саму Ubuntu и обновляю Python до версии 3.10, будут ли виртуальные среды, созданные в предыдущей версии Ubuntu, работать?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
55
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Принцип работы venv заключается в том, что они берут с собой всю среду выполнения Python. Действительно, если вы активируете venv, а затем запустите which python, вы увидите не свой системный Python, а тот, который установлен venv.

Таким образом, если вы обновите свою ОС и одновременно обновите свой системный Python, вам не о чем беспокоиться, потому что на вашем venv все еще будет установлена ​​старая версия.

Спасибо. Могу ли я продолжать добавлять больше виртуальных сред, не беспокоясь о базовом Python?

xinit 17.04.2024 08:56

Это не совсем так. Venvs не включают в себя всю среду выполнения Python; venv зависит от целостности базового интерпретатора Python.

AKX 17.04.2024 08:58

@AKX ох, интересно узнать, я понятия не имел. Тогда это просто символическая ссылка на системный двоичный файл?

Adam Smith 17.04.2024 09:34

виртуальная среда по существу копируется из установки ОС в venv, поэтому вы будете поддерживать все библиотеки в папке venv.

При обновлении ОС двоичные файлы останутся там, и обе версии будут доступны в разных версиях.

Это не совсем так. Не все копируется; venv действительно зависит от целостности базового интерпретатора Python.

AKX 17.04.2024 08:57
Ответ принят как подходящий

Virtualenvs действительно зависят от целостности их базового интерпретатора.

Если обновление ОС (или любой другой процесс) удалит, скажем, python3.8, то нет, venvs, базовым интерпретатором которого является этот python3.8, больше не будет работать.

Чтобы продемонстрировать это в контейнере Docker, давайте установим Python 3.10 и 3.11, создадим venv с обоими из них, затем удалим один базовый интерпретатор и увидим, что соответствующий venv больше не работает:

~ $ docker run -it ubuntu:22.04 bash
# apt update
[...snip...]
# apt install -y python3.10 python3.11 python3.10-venv python3.11-venv
[...snip...]
# python3.10 -m venv venv-310
# python3.11 -m venv venv-311
# venv-310/bin/python --version
Python 3.10.12
# venv-311/bin/python --version
Python 3.11.0rc1
# apt purge 'python3.10-*'
[...snip...]
# venv-310/bin/python --version
bash: venv-310/bin/python: No such file or directory
# venv-311/bin/python --version
Python 3.11.0rc1
# 

Спасибо. Это было очень полезно. Я знал о копировании файлов Python, но не был уверен в зависимости от базы. Я совершенно не понимаю, почему такая основная опасность не упоминается во многих руководствах по виртуальным средам.

xinit 17.04.2024 09:09

Что ж, виртуальные среды должны быть одноразовыми, и вы должны стремиться к тому, чтобы ваши виртуальные среды можно было воссоздать в любое время :)

AKX 17.04.2024 09:11

И да, и нет: указывая --copies, иногда можно создать полностью автономную среду. Фактически, если я попробую именно то, что вы сделали, но используя --copies, среда продолжит работать после удаления системной установки Python. Однако это ненадежно и зависит от того, как был построен Python. В другом сценарии двоичный файл Python ссылается на системные библиотеки, которые сейчас отсутствуют.

Konrad Rudolph 17.04.2024 09:27

@KonradRudolph, значит, лучше использовать специальную базовую версию с использованием Miniconda?

xinit 17.04.2024 09:41

@xinit Путь... чего добиться?

AKX 17.04.2024 09:42

@xinit Зависит от вашего варианта использования. Я не использую и не рекомендую Conda. По моему опыту, это создает больше проблем, чем решает. Но у меня есть полный контроль над установкой моей системы (точнее: там, где у меня нет полного контроля и мне нужна автономная установка, я либо использую контейнеры, либо устанавливаю свой собственный Python).

Konrad Rudolph 17.04.2024 09:44

@KonradRudolph, извини за неопределенность в моем вопросе. Я имел в виду создание venv с использованием Python на основе Miniconda. Таким образом, venvs не будет зависеть от системного Python.

xinit 17.04.2024 10:41

Другие вопросы по теме