Answers:
有几个参数:
这基本上是对的。例如,如果您python-django
按原样安装,则可以获得安全更新。这很好,因为您只需要掌握apt的技巧,但仍然需要在推送更新之前进行测试(尽管每次测试应该可以进行)。
您可能会争辩说,如果使用pip
,则可能永远不会检查更新。
pip
以便您可以使用适当的“稳定”版本。毫无疑问:仓库落后于现实世界。Django是2.0,但是LTS版本的Ubuntu(很多人坚持使用服务器)的存储库在使用Python 2的Ubuntu 16.4 lts上只能得到1.8,但仍然可以得到安全更新。
pip
始终为您提供最新信息。您只需要自己更新即可。
当您将Ubuntu发行版升级到下一个版本时,它会升级许多软件包。很多事情都会改变。我知道在Django中,这意味着您必须当心代码不兼容,不赞成使用的情况,但是对于所有其他Python代码也是如此。
同样的道理,pip
但pip
您一次只能做一件事。您知道导致问题的原因,所以您知道在哪里可以找到此修复程序。
pip
+ virtualenv
让您保持独立virtualenv
让您拥有可移植的小型Python环境。这使您可以在同一台计算机上同时运行多个不同的Python环境。
显而易见的好处似乎是为了维护,因为您可以以与管理代码相同的方式来管理环境。甚至也将环境存储在VCS中... 但是您应该记住,拥有十二个不同的virtualenv
s意味着您需要检查和更新十二个环境。
编辑:在服务器上进行了一系列可怕的升级以使其从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。
有关分歧进行了深入的讨论,请参见包装上的由詹姆斯·贝内特(Django的)和几个更正“包装上的”伊恩Bicking(Mozilla浏览器中)。
如果您想安全起见,请使用virtualenv尝试进行pip部署。这为您提供了一个隔离的python环境,因此您可以确保您的应用程序可以在任何计算机上运行。
不过请稍等,我相信有些人会不同意我的看法。