最符合Python风格的是通过包管理器(macports, apt)安装模块,还是通过pip/easy_install/setuptools?
我通常喜欢通过包管理器来安装东西,特别是一些类Unix系统的东西。不过,当我写很多Perl代码的时候,我会用CPAN来安装更新版本的库。
总的来说,我习惯用包管理器来安装系统相关的东西,而用各自语言的包管理器来安装语言相关的东西,比如Ruby的gem、Python的pip或者Perl的cpan。
现在我主要使用Python,我在想,最好的做法是什么呢?
2 个回答
在这个话题上,有两种完全相反的观点:一种支持使用系统自带的软件包,另一种则支持自己单独安装软件。我个人倾向于“系统软件包”这一方。下面我会分别列出两种观点的理由。
支持系统软件包的理由:系统的软件包管理者已经考虑到了软件之间的依赖关系,并且遵循了整体系统的政策(比如文件的存放方式)。系统软件包会提供安全更新,同时也会尽量保持兼容性——所以有时候他们会把上游作者没有更新的安全修复补丁提前应用到系统软件包中。系统软件包在系统升级时是“安全”的:在你升级系统后,可能会有新的Python版本,但如果你的Python模块是来自系统软件包,它们依然会存在。这是我在使用Debian时的个人经验。
反对系统软件包的理由:并不是所有的软件都能作为系统软件包提供,或者提供的版本不是最新的;自己在系统中安装软件可能会破坏系统软件包的完整性。升级可能会导致你的应用程序出现问题。
支持单独安装的理由:一些人(特别是网络应用开发者)认为,你绝对需要一个可重复的环境,只安装你想要的软件包,并且完全与系统Python解耦。这不仅仅是自安装和系统软件包之间的区别,因为即使是自安装的,你也可能会修改系统的Python;而使用单独安装的话,你就不会这样做。正如Lennart所讨论的,现在有专门的工具链来支持这种设置。人们认为,只有这种方法才能保证结果的一致性。
反对单独安装的理由:你需要自己处理错误修复,并且要确保所有用户都使用这个单独安装的版本。在网络应用的情况下,后者通常比较容易实现。
系统自带的Python版本和它的库通常是软件在安装时使用的。如果你用的软件和你的系统自带的Python版本以及所有库的版本一致,那么使用系统自带的软件包就没问题。
不过,很多时候你可能需要开发版的软件包,或者更新的版本,甚至是旧版本。这时候就会出现问题。
因此,通常建议你安装自己的一份Python版本,用来进行开发,并使用buildout或virtualenv,或者两者结合,来创建独立的开发环境,这样就可以把系统自带的Python和你的开发环境隔离开来。