Python是否具有程序包/模块管理系统?


145

Python是否具有包/模块管理系统,类似于Ruby在哪里可以使用rubygems gem install packagename

在“ 安装Python模块”上,我仅看到对的引用python setup.py install,但这需要您首先找到该软件包。


3
如果您认为Python的软件包索引PyPI应该更清楚地说明如何安装软件包,请在bitbucket.org/pypa/pypi/issue/149/…
Panic Panic

虽然当时是最新的,但此问题中的链接现在指向旧版distutils文档。我提交了bugs.python.org/issue26014来说明这些文档需要更清楚地表明它们不再适合用作最终用户文档(仅出于工具实现者的利益而被保留)。
ncoghlan,2016年

Answers:


213

最近的进展

2014年3月:好消息!Pip随附了Python 3.4。Pip长期以来一直是Python的事实上的标准包管理器。您可以这样安装软件包

pip install httpie

哇!这是所有Python版本中的最佳功能。它使每个人都可以访问社区丰富的图书馆。新手不再因设置困难而无法使用社区库。

但是,Python打包经验仍然有许多令人沮丧的地方。累积地,它们使Python对新手来说非常不受欢迎。而且,长期的忽视历史(即从Python 2.0到Python 3.3一直没有使用包管理器交付14年)确实对社区造成了损害。我在下面描述。

突出的挫败感

重要的是要了解,尽管经验丰富的用户能够解决这些问题,但它们却是Python新手的重大障碍。实际上,困难和普遍的用户不友好可能阻止了其中许多人。

PyPI网站是有帮助的

每种带有程序包管理器的语言都有一个官方(或准官方)存储库,供社区下载和发布程序包。Python具有Python包索引PyPI。 https://pypi.python.org/pypi

让我们将其页面与RubyGems和Npm(节点包管理器)的页面进行比较。

  1. https://rubygems.org/gems/rails软件包的RubyGems页面rails
  2. https://www.npmjs.org/package/express软件包的Npm页面express
  3. https://pypi.python.org/pypi/simplejson/软件包的PyPI页面simplejson

您将看到RubyGems和Npm页面均以该程序包的一行说明开始,然后是如何安装的友好说明。

同时,天真地浏览到PyPI的所有不幸的Python用户都会遇到麻烦。在https://pypi.python.org/pypi/simplejson/上,他们找不到任何有用的说明。但是,有一个绿色的大“下载”链接。遵循它并非没有道理。啊哈,他们点击!他们的浏览器下载.tar.gz文件。许多Windows用户甚至无法打开它,但是如果他们坚持不懈,他们最终可能会提取它,然后运行setup.py并最终在Google的帮助下运行setup.py install。有些人会放弃并重新发明轮子。

当然,所有这些都是错误的。安装软件包的最简单方法是使用Pip命令。但是PyPI甚至没有提到Pip。相反,它引导他们走下了一条古老而乏味的道路。

错误:找不到vcvarsall.bat

Numpy是Python最受欢迎的库之一。尝试使用Pip安装它,您会收到以下错误消息:

错误:找不到vcvarsall.bat

尝试解决此问题是Stack Overflow上最受欢迎的问题之一:“ 错误:无法找到vcvarsall.bat

很少有人能成功。

为了进行比较,在相同情况下,Ruby会显示此消息,该消息说明了正在发生的事情以及如何修复它:

请更新您的PATH以包括构建工具,或从http://rubyinstaller.org/downloads下载DevKit 并按照http://github.com/oneclick/rubyinstaller/wiki/Development-Kit上的说明进行操作

发布包很难

Ruby和Nodejs随附功能齐全的软件包管理器Gem(自2007年起)和Npm(自2011年起),并培育了以GitHub为中心的共享社区。Npm使发布软件包就像安装它们一样容易,它已经有64k软件包。RubyGems列出了72k个软件包。古老的Python软件包索引列出41k

历史

面对“ 包含电池 ”的座右铭,直到2014年Python一直没有包装管理器发货。

在Pip之前,事实上的标准是一个命令 easy_install。真是太糟糕了。was no命令用于卸载软件包。

点子是一个巨大的进步。它具有Ruby's Gem的大多数功能。不幸的是,直到最近,Pip一直很难安装。实际上,该问题仍然是Stack Overflow上最重要的Python问题:“ 如何在Windows上安装pip?


3
对于任何感兴趣的人,PEP 439都提出了一种简化点安装过程的方法,尽管我认为该PEP只是正在研究的更广泛策略的一部分。另请参见此处的讨论。
Cartroo

3
@Cartroo真是个好消息!Python值得一个软件包管理器,我希望开发人员能够实现它。
Panic Panic

绝对是,早就该了。我绝对希望至少能将其纳入Python 3.4。不幸的是,我非常怀疑它最终将被反向移植到2.x,但是在隧道的尽头至少有光。让我们希望它不是
即将来临的

6
在Python的辩护中,幸运的是,诸如Ruby和Node之类的较新语言能够观察到先前语言的错误并避免了它们。就是说,我真的希望Python上的软件包管理能得到更多的关爱,所以我很高兴看到@Cartroo指出的PEP 439。
丹尼斯

从我(最终用户)的角度来看,我同意Ruby的软件包管理是一件很了不起的事情.. gem install X似乎可以在所有平台上使用。那么,对于在Windows上需要C代码编译的gem,他们如何管理呢?
bsa

64

Python包索引(PyPI)似乎是标准的:

  • 安装软件包: pip install MyProject
  • 更新pip install --upgrade MyProject
  • 解决一个版本的一揽子pip install MyProject==1.0

您可以如下安装软件包管理器:

curl -O http://python-distribute.org/distribute_setup.py
python distribute_setup.py
easy_install pip

参考文献:


3
这是现代答案。
Gringo Suave

6
我在互联网上搜索了20分钟,这个答案无处可寻。非常感谢。另外,我对使用python是否存在严重疑问感到怀疑,即文档是否太糟糕了……应该在Python主页上,还是可以从Google或其他网站获得
Chris J

63

只是为了形成对比,还有一点


2
谢谢!为什么在安装python模块文档页面上没有提到pip?
汤米·郑

请注意,pip不支持egg,它仅安装源程序包。一般来说,pip在很多方面都比easy_install更好,但是easy_install可能默认安装在大多数unix上,而pip不是。
杰弗里·哈里斯

8
@汤米吧!如果Python开发人员关心用户体验,他们会在Python中附带一个软件包管理器(例如pip)。Ruby随Gem一起提供,而Nodejs随Npm一起提供。stackoverflow.com/a/13445719/284795
Panic Panic

21

作为Ruby和Perl开发人员和学习Python的人,我还没有发现easy_install或pip等同于RubyGems或CPAN。

当开发人员更新模块时,我倾向于使我的开发系统运行最新版本的模块,并将生产系统冻结为固定版本。RubyGems和CPAN都可以通过列出可用的模块轻松地找到模块,然后进行安装,然后根据需要单独或批量更新。

easy_install和pip使得安装模块变得容易,一旦我通过浏览器搜索找到了它,或者通过其他方法了解了它,但是它们不会告诉我有什么可用。我可以明确命名要更新的模块,但是这些应用程序不会告诉我已更新的内容,也不会在需要时批量更新所有内容。

因此,pip和easy_install中提供了基本功能,但是我希望看到一些缺少的功能,这些功能使它们更友好,更易于使用,并且与CPAN和RubyGems相当。


这个答案现在已经完全过时了。
ncoghlan'1


11

至少从2014年下半年开始,应该考虑使用conda软件包管理器的Continuum Analytics的Anaconda Python发行版。一键下载即可解决一般人们在使用Python时遇到的大多数严重问题(管理不同的Python版本,更新Python版本,软件包管理,虚拟环境,Windows / Mac兼容性)。

它使您无需更改系统就可以使用Python完成几乎所有您想做的事情。我的下一个首选解决方案是pip + virtualenv,但是您要么必须将virtualenv安装到系统Python中(并且系统Python可能不是您想要的版本),要么从源代码构建。Anaconda只需单击一个按钮即可完成整个过程,并添加了许多其他功能。


7

那将是easy_install


1
如果您想对页面上说的每个人都投反对票easy_install,请先检查日期。差不多7年前提出的时候这是正确的建议。我不认为我们的答题者会定期重新访问此内容以进行更新,因此拒绝投票是很愚蠢的。
柯克·斯特拉瑟


5

我在这里没有在其他答案中提到MacPortsHomebrew,但是由于我确实在Stack Overflow的其他地方看到了有关相关问题的提及,因此我会自己添加0.02美元,许多人似乎认为MacPorts不仅是一个软件包软件包管理器(到目前为止,它们列出了16311个软件包/端口,2931个匹配“ python”,尽管仅适用于Mac),但也可以作为Python软件包/模块的不错的(也许更好)的软件包管理器:

“ ... Mac python开发人员使用什么方法来管理其模块?”

答案

科学

“ Mac(与Linux不同)没有软件包管理器,但是您可以安装几个流行的软件包管理器。Macports ...”

我仍在争论是否自己使用MacPorts,但目前我正朝着这个方向发展。


1
Homebrew本身说:您可以使用(过时的easy_install或)安装Python软件包pip install <your_favorite_package>
Simone

4

在Windows上,安装http://chocolatey.org/,然后

choco install python

用更新的PATH打开一个新的cmd窗口。接下来,做

choco install pip

之后,您可以

pip install pyside
pip install ipython
...

我想以此回答托马斯·布雷特(Thomas Bratt)的回答,但我没有足够的声誉...
hansvb 2014年

3

由于此处没有人提到pipenv,因此我想描述一下我的观点,为什么每个人都应该使用它来管理python软件包。

正如@ColonelPanic所提到的,Python包索引以及pipvirtualenv也存在多个问题。

Pipenv使用pip解决了大多数问题,并且还提供了其他功能。

Pipenv功能

Pipenv旨在取代pip和virtualenv,这意味着Pipenv将自动为每个项目创建一个单独的虚拟环境,从而避免不同项目的不同python版本/软件包版本之间发生冲突。

  • 启用真正的确定性构建,同时轻松地仅指定所需内容。
  • 生成并检查文件散列是否存在锁定的依赖关系。
  • 如果pyenv可用,则自动安装所需的Python。
  • 通过查找Pipfile递归自动找到您的项目主页。
  • 如果不存在,则自动生成一个Pipfile。
  • 在标准位置自动创建virtualenv。
  • 卸载/安装软件包时,会自动将软件包添加/删除到Pipfile中。
  • 自动加载.env文件(如果存在)。

如果您以前从事过python项目,您将意识到这些功能使管理软件包变得更加容易。

其他命令

  • check检查安全漏洞,并断言当前环境已满足PEP 508要求。(我认为这是一个很大的功能,尤其是在此之后-PyPi上的恶意软件包
  • graph 将显示安装的依赖关系的依赖关系图。

您可以在此处阅读更多内容-Pipenv

安装

您可以在此处找到安装文档

PS:如果您喜欢处理Python Package 请求,您将很高兴知道pipenv由同一位开发人员Kenneth Reitz



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.