- 如果某个软件包既在全局站点包中安装,又在本地站点包中安装,那么哪一个软件包将被导入?这样做会起作用吗,还是会出错?
- 哪些软件包应该放在全局站点包中,哪些应该放在本地站点包中?
前面的回答解决了问题1,但忽略了问题2。
我见过的最佳做法是将哪些软件包全局安装:
首先,是核心Python软件包,因为它们不会随着向后不兼容的问题而改变,除非你升级了主要版本,并且你希望来自Python升级的任何安全修复都可以自动应用于您的虚拟环境。
其次,是一些很难通过easy_install或pip安装到每个单独的虚拟环境中但又不经常更改的软件包,例如MySQLdb/psycopg和PIL。
几乎所有其他软件包都应该放在虚拟环境的软件包中(我强烈建议使用pip要求文件和virtualenvwrapper使此过程尽可能地轻松,并且易于在其他计算机上设置)。
默认情况下,新创建的虚拟环境可以访问全局 site-packages 目录,除非使用 --no-site-packages 创建。如果在启用某个特定环境时调用 easy_install(安装新软件包),则会导致已经存在于全局 site-packages 中的软件包被覆盖(类似于继承)。当本地缺少包时,环境将使用其自己的本地包和全局包。