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

Does Python have a package/module management system?

python是否有一个包/模块管理系统,类似于ruby如何拥有rubygems,您可以在其中执行gem install packagename

在安装python模块时,我只看到对python setup.py install的引用,但这要求您首先找到包。


最新进展

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(节点包管理器)的页面进行比较。

  • 包的https://rubygems.org/gems/rails rubygems页面rails
  • https://www.npmjs.org/package/express-npm包的页面express
  • simplejson的https://pypi.python.org/pypi/simplejson/pypi页面
  • 您将看到rubygems和npm页面都从一行描述包开始,然后是如何安装包的大型友好说明。

    同时,不幸的是,任何天真地浏览到pypi的不幸的python用户。在https://pypi.python.org/pypi/simplejson/上,他们不会找到这样有用的指令。然而,有一个绿色的"下载"链接。遵循它并不不合理。啊哈,他们点击了!他们的浏览器下载一个.tar.gz文件。许多Windows用户甚至无法打开它,但如果他们坚持下去,最终可能会提取它,然后运行setup.py,最后在google setup.py install的帮助下。有些人会放弃并重新发明轮子。

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

    错误:找不到vcvarsall.bat

    numpy是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之前,实际上的标准是命令easy_install。这是可悲的不足。没有卸载程序包的命令。

    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为什么

    它现代化,简单可靠。