我正在为一群Python新手建立一个新系统来使用Python进行特定的科学工作.它上面有两个不同的pythons(32位和64位),我想安装一组系统用户将使用的通用模块.
>(a)有些模块开箱即用于两个Python,
>(b)一些编译代码并根据python进行不同的安装,以及
>(c)有些人在某些Python身上根本不起作用.
我被告知virtualenv(包装)对这种情况有好处,但我不清楚如何.
>我是否可以使用virtualenv在多个用户帐户中设置沙盒模块,而无需为每个用户安装每个模块?
>我可以使用virtualenv为案例(a)节省一些时间,即安装模块,但所有Python都能看到它吗?
我喜欢隔离环境的想法,然后让它们只输入“workon science32”,“workon science64”,这取决于案例(c)的问题.
任何建议表示赞赏.
解决方法:
使用virtualenv,您可以通过省略–no-site-packages选项,允许每个环境使用全局安装的系统包.这是默认行为.
如果你想让每个环境安装所有自己的软件包,那么使用–no-site-packages,你将得到一个简单的python安装来安装你自己的模块.当您不希望包与系统包冲突时,这非常有用.我通常这样做只是为了防止系统升级干扰工作代码.
我会小心地将这些视为沙箱,因为它们只是部分隔离. python二进制文件和库的路径被修改为使用环境,但实际上就是这样. Virtualenv没有做任何事情来防止代码运行从破坏性的东西到系统.沙盒的最佳方法是正确设置Linux / Unix权限,并为它们提供自己的用户帐户.
编辑版本1.7
1.7的默认值是不包括系统包,因此如果您想要使用系统包的行为,请使用–system-site-packages选项.查看docs以获取更多信息.