Virtualenv:全局site-packages与虚拟环境中的site-packages

7
  1. 如果某个软件包既在全局站点包中安装,又在本地站点包中安装,那么哪一个软件包将被导入?这样做会起作用吗,还是会出错?
  2. 哪些软件包应该放在全局站点包中,哪些应该放在本地站点包中?
2个回答

9

前面的回答解决了问题1,但忽略了问题2。

我见过的最佳做法是将哪些软件包全局安装:

首先,是核心Python软件包,因为它们不会随着向后不兼容的问题而改变,除非你升级了主要版本,并且你希望来自Python升级的任何安全修复都可以自动应用于您的虚拟环境。

其次,是一些很难通过easy_install或pip安装到每个单独的虚拟环境中但又不经常更改的软件包,例如MySQLdb/psycopg和PIL。

几乎所有其他软件包都应该放在虚拟环境的软件包中(我强烈建议使用pip要求文件和virtualenvwrapper使此过程尽可能地轻松,并且易于在其他计算机上设置)。


3

默认情况下,新创建的虚拟环境可以访问全局 site-packages 目录,除非使用 --no-site-packages 创建。如果在启用某个特定环境时调用 easy_install(安装新软件包),则会导致已经存在于全局 site-packages 中的软件包被覆盖(类似于继承)。当本地缺少包时,环境将使用其自己的本地包和全局包。


6
新创建的虚拟环境默认情况下可以访问全局 site-packages 目录,这一点不再正确。 - Piotr Dobrogost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接