Python venv с использованием системного python?

avatar
Zexelon
1 июля 2021 в 20:25
148
1
1

Почему python -m venv py38 все еще использует системный Python??

enter image description here

Это довольно сильно сожгло меня, у меня была очень настроенная среда Python 3.8, которая, как я думал, была изолирована от системы, как рекламируется venv, мой системный Python только что обновился до 3.9, и теперь мне нужно все перестроить.

Будут оценены любые предложения по созданию действительно изолированных сред Python.

Источник
buran
1 июля 2021 в 20:27
0

почему бы не оставить 3.8, если вы хотите его использовать? Нет проблем иметь и 3.8 и 3.9.

wim
1 июля 2021 в 20:30
1

Именно так работают виртуальные среды. Он изолируется от системных сайтов-пакетов, но повторно использует интерпретатор. Для более высокого уровня изоляции рассмотрите вариант docker?

wim
1 июля 2021 в 20:36
1

Не уверен, что вы подразумеваете под «как рекламируется», в документации говорится: Выполнение этой команды создает... подкаталог bin (или Scripts в Windows), содержащий копию/символическую ссылку на двоичный файл Python/binaries

Zexelon
5 июля 2021 в 00:56
0

Проблема (как видно на скриншоте) в том, что venv не линковался с python 3.8, а линковался с python3, тем самым не создавая изолированной среды. Когда система обновилась до 3.9 (в обновлении, которое я пропустил), она сбросила venv. С тех пор я переключился на анаконду, так как она создает изолированные среды. Я посмотрю на удаление этого вопроса, так как, поразмыслив, я не думаю, что это подходит для SO.

Ответы (1)

avatar
J.J.Enrik
28 июля 2021 в 01:44
0

https://docs.python.org/3/library/venv.html

Выполнение этой команды создает целевой каталог (создавая любые родительские каталоги, которые еще не существуют) и помещает в него файл pyvenv.cfg с домашним ключом, указывающим на установку Python, из которой была запущена команда (обычное имя для целевого каталога .venv). Он также создает подкаталог bin (или Scripts в Windows), содержащий копию/символьную ссылку на двоичный/двоичный файл Python (в соответствии с платформой или аргументами, используемыми во время создания среды).

Это заставляет меня думать, что можно иметь не копию установки Python, а ссылку на нее.

В любом случае, в pyenv.cfg должен быть путь к вашему питону, я предлагаю его изменить.

Zexelon
25 августа 2021 в 05:18
0

Я принимаю это как ответ, но есть фундаментальная проблема, которую я вижу с Venv, тогда copy/symlink на самом деле два совершенно разных действия, copy создаст изоляцию, symlink нет, и по умолчанию это выглядит как symlink является нормой и в основном нарушает смысл использования Venv. Спасибо за ответ и примечание из документов, объясняющих это странное поведение.