在使用sudo apt-get install安装软件包或在python虚拟环境中从源代码构建库时(我不是在说pip install),在python虚拟环境中进行安装是否可以隔离正在安装的应用程序?我的意思是它们仅存在于python虚拟环境中吗?
答案 0 :(得分:1)
根据@deceze的评论,虚拟环境对apt
操作没有影响。
从源代码构建时,所有已编译的二进制文件都将链接到该环境的python二进制文件。因此,如果您的virtualenv python版本与系统版本不同,并且您使用系统python(通常是路径问题),则可能会遇到运行时链接错误。
对于隔离,相同的属性(二进制兼容性)将您从系统升级中隔离,这可能会更改系统python二进制文件。通常,我们在2.x和3.x中是稳定的,因此不太可能发生。但是有并且可以。
当然,当从virtualenv内部的源代码构建时,已安装的程序包会存放在该virtualenv中。除非您以奇怪的方式操纵路径或PYTHONPATH,否则其他python二进制文件都无法访问这些软件包。
答案 1 :(得分:1)
虚拟环境为您提供以下版本的隔离版本:
PATH
条目,因此对python
,pip
等的不合格命令行引用将引用所选的Python发行版。如果您在系统上安装了许多Python副本(在开发人员工作站上很常见),这可能会很方便。这意味着像#!/usr/bin/env python
这样的shebang行将在virtualenv内部(至少在Unix或类似Unix的系统上)“做正确的事”。site-packages
目录,因此Python软件包(使用pip
安装或使用setup.py build
在此环境中本地构建)是在virtualenv本地安装的,而不是在系统中安装的范围内的位置。在将核心Python解释器安装在不允许非特权用户写入文件的地方的系统上,这特别有用,因为它允许每个用户拥有自己的私有虚拟环境,并安装了第三方软件包,而无需使用{{ 1}}或相当的软件来在系统范围内安装这些第三方软件包。...就是这样。
虚拟环境不会不会将您隔离:
sudo
)。#!/usr/bin/python
上的非Python事物(例如,通过操作系统的程序包管理器安装的第三方程序或实用程序)。PATH
,/usr/lib
,/usr/include
,/usr/local/lib
)中的非Python库或标头。/usr/local/include
)而不是Python程序包管理器(apt
)安装的Python程序包可能在virtualenv的pip
文件夹中不可见,但此类软件包的“本机”部分(例如,site-packages
)(可能)仍然可见。