Python 为什么要使用蟒蛇';virtualenv';在Linux上,当一个人拥有';chroot';(和联合/覆盖文件系统)?
首先,让我声明我是通用软件的支持者(通常;-)。我不是Python方面的专家,但“virtualenv”实用程序似乎解决了与“chroot”可以帮助解决的问题几乎相同的问题—引导可以作为根传递的目录树,从而有效地保护真正的目录树(如果需要) 由于我不是前面提到的Python专家,我想知道virtualenv能解决哪些chroot无法解决的问题?我的意思是,我能不能只设置一个很好的假根目录树(可能使用union mounting),Python 为什么要使用蟒蛇';virtualenv';在Linux上,当一个人拥有';chroot';(和联合/覆盖文件系统)?,python,linux,virtualenv,chroot,Python,Linux,Virtualenv,Chroot,首先,让我声明我是通用软件的支持者(通常;-)。我不是Python方面的专家,但“virtualenv”实用程序似乎解决了与“chroot”可以帮助解决的问题几乎相同的问题—引导可以作为根传递的目录树,从而有效地保护真正的目录树(如果需要) 由于我不是前面提到的Python专家,我想知道virtualenv能解决哪些chroot无法解决的问题?我的意思是,我能不能只设置一个很好的假根目录树(可能使用union mounting),chroot,然后在新环境中安装一个我想要的包,然后在新环境的范围
chroot
,然后在新环境中安装一个我想要的包,然后在新环境的范围内运行python脚本等等
我是不是遗漏了什么
更新:
我的意思是,不能在没有root权限的情况下在本地安装任何应用程序目录中的包/模块,并且随后不向/usr/lib
或/usr/local/lib
覆盖或添加文件吗?这似乎就是virtualenv所做的,但是我认为它必须为创建的每个环境进行符号链接或提供python解释器,不是吗
引导可作为根目录传递的目录树
这不是virtualenv所做的,除了(在某种程度上)Python包。它提供了一个无需替换文件系统其余部分即可安装这些组件的位置。它也可以在没有root权限的情况下工作,而且它是可移植的,因为它不需要内核支持,不像chroot
,它(我认为)在Windows上不起作用
不能在任何应用程序目录中本地安装程序包/模块吗
是的,但是virtualenv还做了一件事,那就是它禁用(至少默认)系统的Python包目录。这意味着您可以测试软件包是否正确安装了其所有依赖项(您可能忘记列出一个依赖项,因为它已经安装在您的系统上),并且它允许在您需要更新或旧版本时安装不同的版本。不应忽视安装旧版本的能力,因为有时新版本的软件包会引入bug。使用chroot,您必须包装所有文件和数据,而不必使用virtualenv。另外,virtualenv将在Windows上运行。谢谢。如果没有内核支持,python根本无法在Linux上运行,所以我认为内核支持是必不可少的,至少对我来说不是一个因素。Windows也是如此——在这种情况下我不喜欢它,因此它是否支持
chroot
(我知道它不支持)对我来说并不重要。我不是在提倡使用chroot而不是virtualenv,也不是对其他任何人,只是问我是否可以使用前者而不是后者来实现预期的结果?@amn:我的意思是对chroot
的内核支持,当然——这是一个系统调用。但是,是的,您可以用chroot替换virtualenv,这将是更多的工作,而且(对于大多数用例来说)是多余的。