Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么要使用蟒蛇';virtualenv';在Linux上,当一个人拥有';chroot';(和联合/覆盖文件系统)?_Python_Linux_Virtualenv_Chroot - Fatal编程技术网

Python 为什么要使用蟒蛇';virtualenv';在Linux上,当一个人拥有';chroot';(和联合/覆盖文件系统)?

Python 为什么要使用蟒蛇';virtualenv';在Linux上,当一个人拥有';chroot';(和联合/覆盖文件系统)?,python,linux,virtualenv,chroot,Python,Linux,Virtualenv,Chroot,首先,让我声明我是通用软件的支持者(通常;-)。我不是Python方面的专家,但“virtualenv”实用程序似乎解决了与“chroot”可以帮助解决的问题几乎相同的问题—引导可以作为根传递的目录树,从而有效地保护真正的目录树(如果需要) 由于我不是前面提到的Python专家,我想知道virtualenv能解决哪些chroot无法解决的问题?我的意思是,我能不能只设置一个很好的假根目录树(可能使用union mounting),chroot,然后在新环境中安装一个我想要的包,然后在新环境的范围

首先,让我声明我是通用软件的支持者(通常;-)。我不是Python方面的专家,但“virtualenv”实用程序似乎解决了与“chroot”可以帮助解决的问题几乎相同的问题—引导可以作为根传递的目录树,从而有效地保护真正的目录树(如果需要)

由于我不是前面提到的Python专家,我想知道virtualenv能解决哪些chroot无法解决的问题?我的意思是,我能不能只设置一个很好的假根目录树(可能使用union mounting),
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,这将是更多的工作,而且(对于大多数用例来说)是多余的。