为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2021-09-25 21:59:37
在 python 虚拟环境中使用 sudo apt-get install 安装软件包或从源代码构建库时(我不是在谈论 pip install),在 python 虚拟环境中执行它是否会隔离正在安装的应用程序?我的意思是它们只存在于 python 虚拟环境中吗?
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

虚拟环境为您提供的独立版本:

  • 你得到一个单独的PATH入口,让不合格的命令行引用pythonpip等等,都会参考选择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)将(可能)仍然可见。


查看完整回答
反对 回复 2021-09-25
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

虚拟环境对apt操作没有影响。

从源代码构建时,任何编译的二进制文件都将链接到该环境的 python 二进制文件。因此,如果您的 virtualenv python 版本与系统版本不同,并且您使用系统 python(通常是路径问题),则可能会遇到运行时链接错误。

至于隔离,这个相同的属性(二进制兼容性)将您与可能会更改您的系统 python 二进制文件的系统升级隔离开来。通常我们在 2.x 和 3.x 中是稳定的,所以不太可能发生。但是有,而且可以。

当然,当在 virtualenv 中从源代码构建时,已安装的包会存放在该 virtualenv 中;没有其他 python 二进制文件可以访问这些包,除非您以奇怪的方式操作路径或 PYTHONPATH。



查看完整回答
反对 回复 2021-09-25
  • 2 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信