Does Python have a package/module management system?
python是否有一个包/模块管理系统,类似于ruby如何拥有rubygems,您可以在其中执行
在安装python模块时,我只看到对
最新进展
2014年3月:好消息!python 3.4附带PIP。PIP一直是Python事实上的标准包管理器。您可以安装这样的软件包:
1 | pip install httpie |
哇!这是任何Python版本的最佳特性。它让每个人都能接触到社区丰富的图书馆。新来的人不再因为设置的困难而被排除在使用社区图书馆之外。
但是,对于python的打包体验,仍然存在一些显著的挫折。累积起来,它们使Python对新手非常不受欢迎。此外,长期以来的疏忽(即14年来没有与包管理器一起从python 2.0到python 3.3)对社区造成了损害。我在下面描述这两个。
突出的挫折感重要的是要理解,尽管经验丰富的用户能够解决这些挫折,但它们对刚接触到Python的人来说却是一个巨大的障碍。事实上,困难和一般的用户不友好可能会阻止他们中的许多人。
Pypi网站是反作用的包管理器的每种语言都有一个官方(或准官方)存储库,供社区下载和发布包。python有python包索引pypi。https://pypi.python.org/pypi
让我们将它的页面与RubyGems和NPM(节点包管理器)的页面进行比较。
您将看到rubygems和npm页面都从一行描述包开始,然后是如何安装包的大型友好说明。
同时,不幸的是,任何天真地浏览到pypi的不幸的python用户。在https://pypi.python.org/pypi/simplejson/上,他们不会找到这样有用的指令。然而,有一个绿色的"下载"链接。遵循它并不不合理。啊哈,他们点击了!他们的浏览器下载一个
当然,所有这些都是错误的。安装软件包最简单的方法是使用pip命令。但皮比甚至没有提到皮普。相反,它引导他们走上了一条古老而乏味的道路。
错误:找不到vcvarsall.batnumpy是Python最流行的库之一。尝试用pip安装它,您会收到这个神秘的错误消息:
Error: Unable to find vcvarsall.bat
试图修复这是关于堆栈溢出的最流行的问题之一:"错误:找不到vcvarsall.bat"
成功的人很少。
为了进行比较,在相同的情况下,Ruby会打印这个消息,它解释了发生了什么以及如何修复它:
Please update your PATH to include build tools or download the DevKit from http://rubyinstaller.org/downloads and follow the instructions at http://github.com/oneclick/rubyinstaller/wiki/Development-Kit
发布包很困难
Ruby和Nodejs拥有功能齐全的软件包管理器、gem(2007年起)和npm(2011年起),并培育了以Github为中心的共享社区。NPM使发布包和安装包一样容易,它已经有64K个包了。RubyGems列出了72K个包裹。古老的python包索引仅列出41k。
历史面对其"电池包括"的座右铭,python直到2014年才在没有软件包管理器的情况下发货。
在PIP之前,实际上的标准是命令
PIP是一个巨大的进步。它具有红宝石的大部分特征。不幸的是,直到最近,PIP还很难安装。事实上,在堆栈溢出问题上,这个问题仍然是Python的首要问题:"如何在Windows上安装PIP?"
python包索引(pypi)似乎是标准的:
- 要安装软件包:
pip install MyProject - 更新包
pip install --upgrade MyProject - 修复包的版本
pip install MyProject==1.0 。
您可以按如下方式安装包管理器:
1 2 3 | curl -O http://python-distribute.org/distribute_setup.py python distribute_setup.py easy_install pip |
参考文献:
- http://guide.python-distribute.org网站/
- http://pypi.python.org/pypi/distribute
为了提供对比,还有pip。
作为一个Ruby和Perl的开发人员和学习python的人,我没有发现easy-install或pip等同于rubygems或cpan。
当开发人员更新模块时,我倾向于让我的开发系统运行最新版本的模块,并将我的生产系统冻结为固定版本。RubyGems和CPAN都通过列出可用的模块,使查找模块变得容易,然后安装并在需要时单独或批量更新模块。
易于安装和PIP使我通过浏览器搜索找到模块或通过其他方式了解模块后,安装模块变得容易,但它们不会告诉我可用的内容。我可以明确地命名要更新的模块,但是这些应用程序不会告诉我更新了什么,如果我需要的话,它们也不会批量更新所有内容。
因此,基本的功能在pip和easy-install中是存在的,但是有一些功能缺失了,我想看到这将使它们更友好,更容易使用,并且与cpan和rubygems一样。
至少有两个易于安装的PIP及其后续PIP。
至少在2014年底,应考虑Continuum Analytics与Conda软件包管理器的Anaconda python分发。它解决了人们在一次内聚性下载中遇到的大多数与python有关的严重问题(管理不同的python版本、更新python版本、包管理、虚拟环境、Windows/Mac兼容性)。
它使您可以使用Python做几乎所有您想做的事情,而不必更改系统。我的下一个首选解决方案是pip+virtualenv,但是您要么在系统python中安装virtualenv(而您的系统python可能不是您想要的版本),要么从源代码构建。水蟒使整个过程成为一个按钮的点击,以及添加一堆其他功能。
它被称为设置工具。使用"easy-install"命令运行它。
您可以在http://pypi.python.org上找到目录。/
这很容易安装。
在Windows上安装http://chocoley.org/,然后
1 | choco install python |
用更新的路径打开一个新的命令窗口。下一步,做
1 | choco install pip |
之后你可以
1 2 3 | pip install pyside pip install ipython ... |
我在这里没有看到其他答案中提到MacPorts或自制,但由于我在Stack Overflow上的其他地方看到了相关问题,我将添加我自己的0.02美元,许多人似乎认为MacPorts不仅仅是包的包管理器(截至今天,他们列出了16311个包/端口,2931个与"python"匹配的包",尽管只适用于Mac),但作为一名优秀的(可能更好的)python包/模块的包管理器:
问题"…Mac python开发人员用来管理模块的方法是什么?"
答案"MacPorts非常适合Mac上的python。"
"最好的方法是使用MacPorts。"
"我更喜欢MacPorts…"
"使用我的MacPorts设置…"
"我使用MacPorts安装…由MacPorts跟踪的第三方模块"
斯皮皮
"Macs(与Linux不同)不附带包管理器,但有两种流行的包管理器可以安装。麦克波特……"
我仍在讨论是否自己使用MacPorts,但目前我正朝着这个方向倾斜。
因为这里没有人提到pipenv,所以我想描述一下我的视图,为什么每个人都应该使用它来管理python包。
正如@colonelanic所提到的,python包索引以及pip和virtualenv也存在一些问题。
PipeNV解决了PIP的大部分问题,还提供了其他功能。
皮彭夫特征pipenv旨在取代pip和virtualenv,这意味着pipenv将为每个项目自动创建单独的虚拟环境,从而避免不同项目的不同python版本/包版本之间的冲突。
- 启用真正的确定性构建,同时轻松地指定所需的内容。
- 为锁定的依赖项生成并检查文件哈希。
- 如果pyenv可用,则自动安装所需的pythons。
- 通过查找pipfile自动查找项目的主目录。
- 如果不存在,则自动生成一个pipfile。
- 在标准位置自动创建virtualenv。
- 卸载/安装程序包时自动向pipfile添加/删除程序包。
- 自动加载.env文件(如果存在)。
如果您以前处理过python项目,那么您将认识到这些特性使管理包变得更加容易。
其他命令check 检查安全漏洞,并声称当前环境正在满足PEP 508要求。(我认为这是一个很好的特性,尤其是在这之后——pypi上的恶意软件包)graph 将向您显示已安装依赖项的依赖关系图。
你可以在这里读到更多关于它的信息-Pipenv。
安装您可以在这里找到安装文档
P.S.:如果您喜欢使用python包请求,您会很高兴地知道pipenv是由同一个开发人员Kenneth Reitz开发的。
你要找的是诗歌。它负责依赖关系管理、虚拟环境和运行。
在2019年,Poetry是您正在寻找的包和依赖关系经理。
https://github.com/sdispater/poetry为什么
它现代化,简单可靠。