【问题标题】:Which is the most pythonic: installing python modules via a package manager ( macports, apt) or via pip/easy_install/setuptools哪个是最 Pythonic:通过包管理器(macports、apt)或通过 pip/easy_install/setuptools 安装 python 模块
【发布时间】:2010-12-06 06:33:25
【问题描述】:

通常我倾向于通过包管理器安装东西,用于 unixy 的东西。但是,当我编写大量 perl 时,我会使用 CPAN、更新版本等等。

一般来说,我以前通过包管理器安装系统的东西,通过它自己的包管理器 (gem/easy_install|pip/cpan) 安装语言的东西

现在主要使用python,我想知道最佳实践是什么?

【问题讨论】:

    标签: python setuptools distutils pip


    【解决方案1】:

    发行版中的软件经常使用系统 python 版本及其库。只要您使用的软件对与您的发行版相同的 python 版本和所有库感到满意,那么使用发行包就可以正常工作。

    但是,您经常需要软件包的开发版本、更新版本或旧版本。然后它就不再起作用了。

    因此通常建议安装您自己用于开发的 Python 版本,并使用buildoutvirtualenv 或两者创建开发环境,以将系统 python 和开发环境相互隔离。

    【讨论】:

    【解决方案2】:

    有两个完全相反的阵营:一个支持系统提供的软件包,一个支持单独安装。我个人属于“系统包”阵营。我将在下面提供双方的论据。

    Pro 系统包:系统打包器已经关心依赖关系,并遵守整体系统策略(例如文件布局)。系统包提供安全更新,同时仍然关心不破坏兼容性 - 因此它们有时会向后移植上游作者没有向后移植的安全修复程序。系统包是“安全的”。系统升级:系统升级后,您可能还有一个新的 Python 版本,但如果您的所有 Python 模块来自系统打包程序,它们仍然存在。以上都是 Debian 的个人经验。

    Con 系统包:并非所有软件都可以作为系统包提供,或者不是最新版本;将自己的东西安装到系统中可能会破坏系统包。升级可能会破坏您的应用程序。

    Pro 单独安装:有些人(尤其是 Web 应用程序开发人员)认为您绝对需要一个可重复的设置,只包含您想要的包,并且与系统 Python 完全解耦。这超出了自行安装和系统包的范围,因为即使是自行安装,您仍然可能会修改系统 python;单独安装,你不会。正如 Lennart 所讨论的,现在有专门的工具链来支持这种设置。人们争辩说,只有这种方法才能保证可重复的结果。

    Con 单独安装:您需要自己处理错误修复,并且您需要确保所有用户都使用单独安装。对于 Web 应用程序,后者通常很容易实现。

    【讨论】:

    • 很公平。我总是想知道为什么 setuptools,尤其是 ruby​​gems 等不安装到 /usr/local 树中,这是存放本地东西的地方。呃,好吧。对于它的价值,作为系统管理员也是如此(我们不是很多东西吗?)我更喜欢你的方法。不过,python 似乎有很大的问题。捏着鼻子走“开发环境路线”
    • 我完全同意在系统 Python 中安装时最好使用发行版包。但是,对于开发工作以及功能很多的生产系统,您需要为单独的软件提供单独的环境(除非它们都以更新和维护的发行包的形式出现)。
    • 作为一项个人政策,我不使用没有系统包的软件,也不使用与系统打包商提供的版本不同的软件。这可能意味着我不能使用很多包——运气不好;我可能不得不重新实现一些东西。从好的方面来说,我仅限于使用“稳定”软件,因此我实际上不需要跟踪每个开发版本,因为某些库决定它需要某个其他包的未发布版本。
    • 我属于专业独立安装类别,但我不会说您“绝对”需要可重复的设置。只是一旦你有了一个,很多系统管理员和调试的麻烦就消失了。知道生产中使用的每个库都与我的开发沙箱中的版本完全相同,这让事情变得更容易。同样,知道在生产中的一个应用程序上升级库不会影响任何其他生产应用程序(不利或其他方面),这让我的系统管理员感到欣慰。
    • > 我一直想知道为什么 setuptools,尤其是 ruby​​gems 等 > 没有安装到 /usr/local 树中 Distutils 被固定为 IIRC。
    猜你喜欢
    • 2020-03-03
    • 2016-02-01
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    相关资源
    最近更新 更多