Какие «операции» действительно изолирует виртуальная среда Python? - PullRequest
0 голосов
/ 26 декабря 2018

При установке пакетов с помощью sudo apt-get install или сборке библиотек из исходного кода в виртуальной среде Python (я не говорю об установке pip), изолирует ли это выполнение в виртуальной среде Python устанавливаемые приложения?Я имею в виду, они существуют только внутри виртуальной среды Python?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Вещи, которые виртуальная среда предоставляет вам изолированную версию:

  • Вы получаете отдельную запись PATH, поэтому неквалифицированные ссылки командной строки на python, pip и т. Д., будет ссылаться на выбранный дистрибутив Python.Это может быть удобно, если в системе установлено много копий Python (обычно на рабочих станциях разработчиков).Это означает, что строка shebang, такая как #!/usr/bin/env python, будет «делать правильные вещи» внутри virtualenv (по крайней мере, в Unix или Unix-подобной системе).
  • Вы получаете отдельный каталог site-packages,поэтому пакеты Python (устанавливаемые с помощью pip или создаваемые локально внутри этой среды с использованием, например, setup.py build) устанавливаются локально в virtualenv, а не в общесистемном расположении.Это особенно полезно в системах, где основной интерпретатор Python установлен в месте, где непривилегированным пользователям не разрешено писать файлы, поскольку он позволяет каждому пользователю иметь свои собственные частные virtualenvs с установленными сторонними пакетами, без необходимости использовать sudo или эквивалент для установки этих сторонних пакетов в масштабе всей системы.

... и все.

Виртуальная среда не изолирует васот:

  • Ваша операционная система (Linux, Windows) или архитектура компьютера (x86).
  • Скрипты, которые напрямую ссылаются на определенный интерпретатор Python (например, #!/usr/bin/python).
  • Не-Python вещи в вашей системе PATH (например, сторонние программы или утилиты, установленные через менеджер пакетов вашей операционной системы).
  • Не-Python библиотеки или заголовки, которые установлены в определенном месте операционной системы(например, /usr/lib, /usr/include, /usr/local/lib, /usr/local/include).
  • Пакеты Python, установленные с помощью операционной системыМенеджер пакетов m (например, apt), а не менеджер пакетов Python (pip), возможно, не будет виден из папки site-packages virtualenv, но «нативные» части таких пакетов (например, /usr/lib) будут(вероятно) все еще быть видимым.
0 голосов
/ 26 декабря 2018

Согласно комментарию @deceze, виртуальные среды не влияют на apt операции.

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

Что касается изоляции, то это же свойство (двоичная совместимость) изолирует вас.от системных обновлений, которые могут изменить ваши системные двоичные файлы Python.Обычно мы стабильны в 2.x и 3.x, так что это вряд ли произойдет.Но имеет и может.

И, конечно, при сборке из исходного кода в virtualenv установленные пакеты сохраняются в этом virtualenv;никакие другие двоичные файлы Python не будут иметь доступа к этим пакетам, если вы не управляете своим путем или PYTHONPATH странными способами.

...