easy_install/pip 或 apt-get

Leo*_*ied 30 python apt

Rails 上的 Ubuntu wiki 页面所述,建议使用 gems 管理您的 Rails/Ruby 依赖项。

像 Django 这样的 Python 包的最佳实践是什么?我应该通过 apt-get 安装它们还是应该让 easy_install/pip 从 PyPi 获取它们?

Oli*_*Oli 29

有几种说法:

  1. 使用存储库/PPA,因为它们将使您保持稳定和最新的安全修复程序。

    这大多是真的。例如,如果您python-django像我一样安装,您将获得安全更新。这很好,因为您只需要保持 apt 的领先地位,但您仍然需要在推送更新之前进行测试(尽管每次测试都应该没问题)。

    您可能会争辩说,如果您使用pip,您可能永远不会检查更新。

  2. 使用,pip以便您可以使用正确的“稳定”版本。

    毫无疑问:回购落后于现实世界。Django 是 2.0,但是 Ubuntu LTS 版本的存储库(很多人坚持使用服务器)在 Ubuntu 16.4 lts 和 Python 2 上只能获得 1.8,但仍然可以获得安全更新。

    pip随时为您提供最新信息。你只需要自己更新它们。

  3. 升级回购使用的 Python 安装可能是一场噩梦

    当你将 Ubuntu 升级到下一个版本时,它会升级很多包。很多事情都会改变。我知道在 Django 中,这意味着您必须注意代码不兼容、弃用……但这同样适用于所有其他 Python 代码。

    这同样适用于pippip您一次只能做一件事。您知道导致问题的原因,因此您知道在哪里可以找到修复程序。

  4. pip+virtualenv让你把事情分开

    virtualenv让您拥有可移植的小型 Python 环境。这允许您在同一台机器上同时运行多个不同的 Python 环境。

    显而易见的好处似乎是维护,因为您可以像管理代码一样管理环境。甚至将环境也存储在 VCS 中……您应该记住,有 12 个不同的virtualenvs 意味着您需要检查和更新 12 个环境。


编辑:在服务器上进行了一系列可怕的升级以将其从 Lucid 升级到 Precise 之后,我已从混合 Apt+pip(nr 1 和 2)切换到纯 pip+virtualenv(nr.4)情况。每个站点没有一个 virtualenv,我在十几个站点之间共享了一个。这是现在工作。

我还必须编写一个小脚本来检查使用 pip 安装的软件包的状态。如果有更新,我必须手动应用它们(这很好,因为我在本地 virtualenv 中测试它们)。这一切仍然比最初更痛苦,但从长远来看好得多。


Ste*_*zzo 10

  • 来自存储库的包

    只要您的应用程序以某种方式,这些应该安装特定的到Ubuntu。它们向您保证可以在 Ubuntu 机器上安装的稳定版本,它们受到支持,有时比您通过 pip 获得的版本更成熟。如果您部署了一堆 ubuntu 服务器,或者您正在编写 Ubuntu 应用程序,请使用这些(如果可用)

    它们有时还包含特定于 Ubuntu 的修改。

  • pip 与 easy_install

    即使世界没有什么好说的那些,如Django的黑客詹姆斯·贝内特说的那样:

    出于对 Guido 的热爱,请停止使用 setuptools 和 easy_install,而使用 distutils 和 pip。

    有关分歧进行了深入的讨论,请参见包装上的由詹姆斯·贝内特(Django的)和几个更正“包装上的”伊恩Bicking(Mozilla浏览器中)。

如果你想成为安全,尝试一下你的点子部署使用的virtualenv。这给你一个孤立的Python环境,所以你可以确保你的应用程序将在任何机器上运行。

稍等一下,虽然,我相信一定会有人不同意我。