easy_install / pip或apt-get


30

在Rails的Ubuntu Wiki页面中所述,建议gems管理您的Rails / Ruby依赖项。

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

Answers:


29

有几个参数:

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

    这基本上是对的。例如,如果您python-django按原样安装,则可以获得安全更新。这很好,因为您只需要掌握apt的技巧,但仍然需要在推送更新之前进行测试(尽管每次测试应该可以进行)。

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

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

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

    pip始终为您提供最新信息。您只需要自己更新即可。

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

    当您将Ubuntu发行版升级到下一个版本时,它会升级许多软件包。很多事情都会改变。我知道在Django中,这意味着您必须当心代码不兼容,不赞成使用的情况,但是对于所有其他Python代码也是如此。

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

  4. pip+ virtualenv让您保持独立

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

    显而易见的好处似乎是为了维护,因为您可以以与管理代码相同的方式来管理环境。甚至也将环境存储在VCS中... 但是您应该记住,拥有十二个不同的virtualenvs意味着您需要检查和更新十二个环境。


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

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


10
  • 存储库中的软件包

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

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

  • pip vs easy_install

    正如Django黑客James Bennett所说的,关于这些,没有太多要说的:

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

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

如果您想安全起见,请使用virtualenv尝试进行pip部署。这为您提供了一个隔离的python环境,因此您可以确保您的应用程序可以在任何计算机上运行。

不过请稍等,我相信有些人会不同意我的看法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.