easy_install / pip或apt-get
正如Rails上的Ubuntu wiki页面所述,建议gems管理你的Rails / Ruby依赖项。
使用像Django这样的Python软件包的最佳做法是什么? 我应该通过apt-get安装它们还是应该让easy_install / pip从PyPi中获取它们?
有几个论点:
-
使用存储库/ PPA,因为它们将使您既稳定又更新安全修复程序。
这基本上是正确的。 例如,如果您按原样安装
python-django
,则会获得安全更新。 这很好,因为你只需要保持在apt之上,但在推送更新之前你仍然需要测试一些东西(尽管每次测试都应该没问题)。您可能会争辩说,如果您使用了
pip
,则可能永远不会检查更新。 -
使用
pip
这样你就可以使用正确的“稳定”版本。毫无疑问:回购落后于现实世界。 Django是2.0但是UTSntu的LTS版本的回购(许多人坚持使用服务器)你只使用Python 2在Ubuntu 16.4 lts上获得1.8,但仍然获得安全更新。
pip
为您提供最新信息。 你只需要自己更新它们。 -
升级repo使用的Python安装可能是一场噩梦
当您将Ubuntu升级到下一个版本时,它会升级很多软件包。 很多事情都在改变。 我知道在Django中这意味着你必须小心注意代码不兼容,弃用……但这同样适用于所有其他Python代码。
pip
也是如此,但是你可以一次做一件事。 您知道导致问题的原因,以便您知道在哪里找到修复程序。 -
pip
+virtualenv
让你把事情分开virtualenv
让您拥有可移植的小型Python环境。 这允许您在同一台计算机上将几个不同的Python环境并排运行。显而易见的好处似乎是维护,因为您可以像管理代码一样管理环境。 甚至将环境存储在VCS中…… 但是你应该记住,拥有12个不同的
virtualenv
s意味着需要检查和更新的12个环境。
编辑:在服务器上进行了一系列可怕的升级以使其从Lucid到Precise之后,我已经从混合的Apt + pip(nr 1和2)切换到纯粹的pip + virtualenv(nr.4)情况。 我没有每个站点有一个virtualenv,而是在十几个站点之间有一个共享站点。 这个目前正在运作。
我还必须编写一个小脚本来检查使用pip安装的软件包的状态。 如果有更新,我必须手动应用它们(这很好,因为我在本地测试它们,在本地virtualenv)。 这一切仍然比原来更痛苦,但从长远来看要好得多。
-
来自存储库的包
只要您的应用程序以某种特定于Ubuntu的方式安装,就应该安装它们。 它们保证您可以在Ubuntu机器上安装稳定版本,它们受到支持,有时比通过pip获得的版本更成熟。 如果您部署了一堆ubuntu服务器,或者您正在编写Ubuntu应用程序,请使用这些服务器(如果可用) 。
它们有时也包含特定于Ubuntu的修改。
-
pip vs easy_install
正如Django黑客James Bennett所说的那样,对此并不多说:
请为Guido的爱,停止使用setuptools和easy_install,并使用distutils和pip代替。
有关这些差异的深入讨论,请参阅James Bennett(django)的封装和Ian Bicking(Mozilla)的“On Packaging”的几个更正 。
如果您想要安全,请使用virtualenv尝试您的pip部署。 这为您提供了一个独立的python环境,因此您可以确保您的应用程序可以在任何计算机上运行。
稍等一下,我相信有些人会不同意我的观点。