通常我倾向于通过包管理器安装东西,用于 unixy 的东西。然而,当我编写了很多 perl 时,我会使用 CPAN、更新版本等等。
一般来说,我曾经通过包管理器安装系统的东西,通过它自己的包管理器(gem/easy_install|pip/cpan)安装语言的东西
现在主要使用python,我想知道最佳实践是什么?
通常我倾向于通过包管理器安装东西,用于 unixy 的东西。然而,当我编写了很多 perl 时,我会使用 CPAN、更新版本等等。
一般来说,我曾经通过包管理器安装系统的东西,通过它自己的包管理器(gem/easy_install|pip/cpan)安装语言的东西
现在主要使用python,我想知道最佳实践是什么?
发行版中的软件经常使用系统 python 版本及其库。只要您使用的软件对与您的发行版相同的 python 版本和所有库感到满意,那么使用发行版包就可以正常工作。
但是,您经常需要软件包的开发版本,或更新版本或旧版本。然后它不再起作用了。
因此通常建议安装您自己用于开发的 Python 版本,并使用buildout或virtualenv或两者创建开发环境,以将系统 python 和开发环境相互隔离。
有两个完全相反的阵营:一个支持系统提供的软件包,一个支持单独安装。我个人属于“系统包”阵营。我将在下面提供来自各方的论据。
专业系统包:系统打包器已经关心依赖关系,并遵守整体系统策略(例如文件布局)。系统包提供安全更新,同时仍然关心不破坏兼容性 - 因此它们有时会向后移植上游作者没有向后移植的安全修复程序。系统包是“安全的”。系统升级:系统升级后,您可能还有一个新的 Python 版本,但如果您的所有 Python 模块来自系统打包程序,它们仍然存在。以上都是 Debian 的个人经验。
Con 系统包:并非所有软件都可以作为系统包提供,或者不是最新版本;将自己的东西安装到系统中可能会破坏系统包。升级可能会破坏您的应用程序。
Pro 单独安装:有些人(尤其是 Web 应用程序开发人员)认为您绝对需要一个可重复的设置,只包含您想要的包,并且与系统 Python 完全解耦。这超出了自行安装和系统包的范围,因为即使是自行安装,您仍然可能会修改系统 python;单独安装,你不会。正如 Lennart 所讨论的,现在有专门的工具链来支持这种设置。人们争辩说,只有这种方法才能保证可重复的结果。
单独安装:您需要自己处理错误修复,并且需要确保所有用户都使用单独安装。在 Web 应用程序的情况下,后者通常很容易实现。