在我的工作场所,我必须管理许多(目前数十个,但最终可能数百个)Python Web应用程序,可能运行各种框架,库等(所有版本都有)。到目前为止,Virtualenv一直是管理人员的救星,但我仍然希望能够更好地管理事情,特别是在管理软件包升级方面。
我想过几个场景
选项1: 使用pip为每个virtualenv中的每个项目安装所有必需的模块,根据需要单独升级每个模块。这将需要每次升级的大量时间成本,并且需要额外的文档来跟踪事物。可能会受到一些管理脚本的推动。
选项2: 在中央存储库中安装任何应用程序使用的所有库,使用符号链接轻松地为所有项目更改一次版本。轻松升级和集中管理,但放弃了使用virtualenv的一些最好的好处。
选项3: 以某种方式将上述两者混合,集中最常见的库和/或那些可能需要升级的库,并将其余库安装在每个虚拟库中。
还有其他人有类似的情况吗?处理这个问题的最佳方法是什么?
答案 0 :(得分:2)
您可以考虑使用zc.buildout。设置比普通的pip / virtualenv更烦人,但它为您提供了更多的自动化机会。如果磁盘空间使用不是问题,我建议你继续为每个项目使用单独的环境,这样你就可以一次升级它们。
答案 1 :(得分:0)
我们的项目根目录中有一个requirements.pip文件,其中包含要安装pip的软件包,因此自动升级相对容易。我不确定符号链接是否可以解决问题 - 这将使得更难以升级到项目的子集。如果磁盘空间不是问题,并且您可以编写一些简单的脚本来列出和升级软件包,那么我会坚持使用virtualenv。