python 虚拟环境真正隔离了哪些“操作”?

在 python 虚拟环境中使用 sudo apt-get install 安装软件包或从源代码构建库时(我不是在谈论 pip install),在 python 虚拟环境中执行它是否会隔离正在安装的应用程序?我的意思是它们只存在于 python 虚拟环境中吗?


慕尼黑5688855
浏览 157回答 2
2回答

撒科打诨

虚拟环境为您提供的独立版本:你得到一个单独的PATH入口,让不合格的命令行引用python,pip等等,都会参考选择Python发布。如果您在系统上安装了许多 Python 副本(在开发人员工作站上很常见),这会很方便。这意味着像这样的 shebang 行将#!/usr/bin/env python在 virtualenv 内部“做正确的事情”(至少在 Unix 或类 Unix 系统上)。您将获得一个单独的site-packages目录,因此 Python 包(pip在此环境中使用 eg安装或在本地构建setup.py build)被安装到 virtualenv 本地而不是系统范围的位置。这在核心 Python 解释器安装在不允许非特权用户写入文件的地方的系统上特别有用,因为它允许每个用户拥有自己的私有 virtualenvs 并安装了第三方软件包,而无需使用sudo或等效在系统范围内安装这些第三方软件包。......就是这样。虚拟环境不会将您与:您的操作系统(Linux、Windows)或机器架构(x86)。直接引用特定 Python 解释器的脚本(例如#!/usr/bin/python)。系统上的非 Python 内容PATH(例如,通过操作系统的包管理器安装的第三方程序或实用程序)。安装到操作系统特定位置(例如/usr/lib、/usr/include、/usr/local/lib、/usr/local/include)的非 Python 库或头文件。使用操作系统的包管理器(例如apt)而不是 Python 包管理器(pip)安装的 Python 包可能无法从 virtualenv 的site-packages文件夹中看到,但此类包的“本机”部分(在 eg 中/usr/lib)将(可能)仍然可见。

饮歌长啸

虚拟环境对apt操作没有影响。从源代码构建时,任何编译的二进制文件都将链接到该环境的 python 二进制文件。因此,如果您的 virtualenv python 版本与系统版本不同,并且您使用系统 python(通常是路径问题),则可能会遇到运行时链接错误。至于隔离,这个相同的属性(二进制兼容性)将您与可能会更改您的系统 python 二进制文件的系统升级隔离开来。通常我们在 2.x 和 3.x 中是稳定的,所以不太可能发生。但是有,而且可以。当然,当在 virtualenv 中从源代码构建时,已安装的包会存放在该 virtualenv 中;没有其他 python 二进制文件可以访问这些包,除非您以奇怪的方式操作路径或 PYTHONPATH。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python