Python有包/模块管理系统吗?

tom*_*eng 144 python module

Python有一个包/模块管理系统,类似于Ruby有rubygems的地方gem install packagename吗?

安装Python模块时,我只看到对它的引用python setup.py install,但这需要您首先找到该包.

Col*_*nic 212

最近的进展

2014年3月:好消息!Python 3.4附带Pip.Pip一直是Python事实上的标准包管理器.您可以安装这样的包:

pip install httpie
Run Code Online (Sandbox Code Playgroud)

Wahey!这是任何Python版本的最佳功能.它使每个人都可以访问社区丰富的图书馆.由于设置难度大,新手不再被排除在使用社区库之外.

然而,Python包装体验仍然存在许多令人沮丧的挫败感.累积起来,他们让Python对新手来说非常不受欢迎.此外,长期忽视的历史(即,从Python 2.0到Python 3.3没有使用包管理器14年)对社区造成了损害.我在下面描述.

出色的挫败感

重要的是要理解,虽然有经验的用户能够解决这些挫折,但对于刚接触Python的人来说,它们是一个重大障碍.事实上,困难和一般用户不友好可能会阻止他们中的许多人.

PyPI网站反作用

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

让我们将它的页面与RubyGems和Npm(Node包管理器)的页面进行比较.

  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甚至没有提到皮普.相反,它引导他们走上了古老而繁琐的道路.

错误:无法找到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.

历史

面对其" 包含电池 "的座右铭,Python在2014年之前没有包装管理器.

直到Pip,事实上的标准才是命令 easy_install.这是非常不足够的.没有卸载软件包的命令.

皮普是一个巨大的进步.它拥有Ruby's Gem的大多数功能.不幸的是,Pip直到最近才讽刺地难以安装.实际上,问题仍然是Stack Overflow上的一个顶级Python问题:" 如何在Windows上安装pip? "

  • 在Python的辩护中,像Ruby和Node这样的新语言很幸运能够观察到以前语言的错误并避免使用它们.也就是说,我真的希望Python上的包管理会得到更多的关爱和关怀,所以我很高兴看到@Cartroo所指出的PEP 439. (6认同)
  • 对于任何感兴趣的人,[PEP 439](http://www.python.org/dev/peps/pep-0439/)正在提出一种简化pip安装过程的方法,尽管我认为这个PEP只是一个部分.更广泛的战略正在被关注.另见讨论[此处](http://mail.python.org/pipermail/distutils-sig/2013-March/020254.html). (3认同)
  • @Cartroo这是个好消息!Python值得一个包管理器,我希望开发人员可以实现它. (3认同)

Tho*_*att 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
Run Code Online (Sandbox Code Playgroud)

参考文献:

  • 我在互联网上搜索了20分钟,这个答案无处可去.非常感谢.另外,如果文档很糟糕,我对使用python有严重的疑问......这应该在Python主页上,或者可以从谷歌或*东西*访问 (6认同)
  • 这是现代的答案. (3认同)

Ign*_*ams 63

而且只是提供对比,还有点子.

  • @Tommy对!如果Python开发人员关心用户体验,他们会使用包管理器(例如pip)发布Python.Ruby附带Gem,Nodejs带有Npm.http://stackoverflow.com/a/13445719/284795 (8认同)
  • 谢谢!为什么在安装python模块文档页面上没有提到pip? (2认同)

the*_*Man 21

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

我倾向于让开发系统在开发人员更新时运行最新版本的模块,并在设置版本中冻结我的生产系统.RubyGems和CPAN都可以通过列出可用的内容轻松找到模块,然后安装并稍后根据需要单独或批量更新它们.

easy_install和pip使我可以轻松安装模块ONCE我通过浏览器搜索找到它或通过其他方式了解它,但它们不会告诉我什么是可用的.我可以明确地命名要更新的模块,但是应用程序不会告诉我更新的内容,也不会批量更新所有内容.

所以,pip和easy_install中的基本功能都存在,但是有些功能缺失,我希望看到这些功能可以使它们更友好,更易于使用,并且与CPAN和RubyGems相提并论.


Wol*_*lph 13

至少有两个,easy_install及其后续.


and*_*man 11

截至2014年底,应该考虑使用康美达包管理器的Continuum Analytics的Anaconda Python发行版.它通过一个有凝聚力的下载解决了人们遇到的大多数严重问题(管理不同的Python版本,更新Python版本,包管理,虚拟环境,Windows/Mac兼容性).

它使您可以使用Python完成您想要的所有操作,而无需更改系统.我的下一个首选解决方案是pip + virtualenv,但您必须将virtualenv安装到您的系统Python中(并且您的系统Python可能不是您想要的版本),或者从源代码构建.Anaconda通过点击按钮完成整个过程,并添加了许多其他功能.


Chr*_*ong 6

它叫做setuptools.您可以使用"easy_install"命令运行它.

您可以在http://pypi.python.org/找到该目录.


Ost*_*oon 5

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

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

答案

科学

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

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