【问题标题】:Does Python have a package/module management system?Python 有包/模块管理系统吗?
【发布时间】:2011-01-27 01:28:56
【问题描述】:

Python 是否有包/模块管理系统,类似于 Ruby 的 ruby​​gems,您可以在其中进行gem install packagename

Installing Python Modules 上,我只看到对 python setup.py install 的引用,但这需要你先找到包。

【问题讨论】:

  • 如果您认为 Python 的包索引 PyPI 应该有更清晰的说明如何安装包,请在bitbucket.org/pypa/pypi/issue/149/… 上对问题进行投票和评论
  • 虽然它当时是最新的,但这个问题中的链接现在指向旧的 distutils 文档。我提交了bugs.python.org/issue26014 以说明这些文档需要更清楚地表明它们不再适合用作最终用户文档(它们只是为了工具实施者的利益而保留)。

标签: python module


【解决方案1】:

那就是easy_install

【讨论】:

  • 如果你想对页面上说easy_install的每个人投反对票,请先检查日期。这是差不多 7 年前给出的有效建议。我不认为我们的回答者会定期重新访问此内容以进行更新,因此投反对票很愚蠢。
【解决方案2】:

它被称为设置工具。您可以使用“easy_install”命令运行它。

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

【讨论】:

    【解决方案3】:

    为了提供对比,还有pip

    【讨论】:

    • 谢谢!为什么在安装 python 模块文档页面上没有提到 pip?
    • 注意pip不支持eggs,它只安装源码包。一般来说,pip 做的很多事情都比easy_install 好很多,但是easy_install 很可能在大多数unix 上默认安装,pip 不是。
    • @Tommy 对!如果 Python 开发人员关心用户体验,他们会为 Python 提供一个包管理器(例如 pip)。 Ruby 附带 Gem,Nodejs 附带 Npm。 stackoverflow.com/a/13445719/284795
    【解决方案4】:

    至少有两个,easy_install 及其继任者pip

    【讨论】:

      【解决方案5】:

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

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

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

      因此,pip 和 easy_install 中具有基本功能,但我希望看到一些功能缺失,这将使它们更友好、更易于使用,并与 CPAN 和 RubyGems 相提并论。

      【讨论】:

      • 这个答案现在已经过时了。
      【解决方案6】:

      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
      

      参考资料:

      【讨论】:

      • 这是现代答案。
      • 我在网上搜索了 20 分钟,但没有找到这个答案。太感谢了。另外,如果文档这么糟糕,我对使用 python 有很大的怀疑......这应该在 Python 主页上或可从谷歌或 something 访问
      【解决方案7】:

      近期进展

      2014 年 3 月:好消息! Python 3.4 与 Pip 一起提供。 Pip 长期以来一直是 Python 的事实上的标准包管理器。你可以像这样安装a package

      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(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 甚至没有提到 Pip。相反,它引导他们走上了一条古老而乏味的道路。

      错误:无法找到 vcvarsall.bat

      Numpy 是 Python 最流行的库之一。尝试使用 Pip 安装它,您会收到这条神秘的错误消息:

      错误:无法找到 vcvarsall.bat

      尝试解决这个问题是 Stack Overflow 上最受欢迎的问题之一:“error: Unable to find 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 让publishing packages 就像安装它们一样简单,它已经有了64k packages。 RubyGems 列出了72k packages。古老的 Python 包索引列出了only 41k

      历史

      面对其“batteries included”座右铭,Python 在 2014 年之前一直没有包管理器。

      在 Pip 之前,事实上的标准是命令 easy_install。可悲的是,它是不够的。 was no 命令卸载软件包。

      Pip 是一个巨大的改进。它具有 Ruby 的 Gem 的大部分功能。不幸的是,Pip - 直到最近 - 具有讽刺意味的是难以安装。事实上,这个问题仍然是 Stack Overflow 上的一个 Python 热门问题:“How do I install pip on Windows?

      【讨论】:

      • 对于任何感兴趣的人,PEP 439 提出了一种简化 pip 安装过程的方法,尽管我认为这个 PEP 只是正在研究的更广泛战略的一部分。另见讨论here
      • @Cartroo 这是个好消息! Python 值得拥有一个包管理器,我希望开发者能够做到这一点。
      • 当然,早就该了。我绝对希望它至少可以进入 Python 3.4。不幸的是,我非常怀疑它最终会被向后移植到 2.x,但至少在隧道尽头有光明。让我们只希望它不是迎面而来的龙……(^_^)
      • 在 Python 的辩护中,Ruby 和 Node 等较新的语言很幸运能够观察到以前语言的错误并避免它们。也就是说,我真的希望 Python 上的包管理能够得到更多的爱和关怀,所以我很高兴看到 @Cartroo 指出的 PEP 439。
      • 我同意 Ruby 的包管理从我(最终用户)的角度来看是一件很棒的事情。gem install X 似乎适用于所有平台。那么对于需要在 Windows 上编译 C 代码的 gem,他们是如何管理的呢?
      【解决方案8】:

      我没有在此处的其他答案中看到 MacPortsHomebrew,但由于我确实在 StackOverflow 的其他地方看到了相关问题的提及,我将添加我自己的 0.02 美元,许多人似乎都认为考虑 MacPorts 不仅是一般包的包管理器(截至今天,它们列出了 16311 个包/端口,2931 个匹配“python”,尽管仅适用于 Mac),而且还是一个不错的(也许更好)Python 包管理器包/模块:

      问题

      "...what is the method that Mac python developers use to manage their modules?"

      答案

      科学

      "Macs (unlike Linux) don’t come with a package manager, but there are a couple of popular package managers you can install. Macports..."

      我仍在争论是否自己使用 MacPorts,但目前我倾向于那个方向。

      【讨论】:

      • Homebrew 本身说:您可以使用(过时的 easy_install 或)pip install <your_favorite_package> 安装 Python 包
      【解决方案9】:

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

      choco install python
      

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

      choco install pip
      

      之后就可以了

      pip install pyside
      pip install ipython
      ...
      

      【讨论】:

      • 我想作为对 Thomas Bratt 答案的评论来回答这个问题,但我没有足够的声誉......
      【解决方案10】:

      至少从 2014 年末开始,应该考虑使用带有 conda 包管理器的 Continuum Analytics' Anaconda Python 发行版。它解决了人们在使用 Python 时遇到的大多数严重问题(管理不同的 Python 版本、更新 Python 版本、包管理、虚拟环境、Windows/Mac 兼容性)。

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

      【讨论】:

        【解决方案11】:

        由于这里没有人提到pipenv,我想描述一下我的看法,为什么每个人都应该使用它来管理python包。

        正如@ColonelPanic 提到的,Python Package Index 以及 pipvirtualenv 也存在几个问题。

        Pipenv 解决了 pip 的大部分问题,还提供了其他功能。

        Pipev 功能

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

        • 启用真正确定性的构建,同时轻松指定您想要的内容。
        • 生成并检查文件哈希以查找锁定的依赖项。
        • 如果 pyenv 可用,自动安装所需的 Python。
        • 通过查找 Pipfile 以递归方式自动找到您的项目主页。
        • 如果 Pipfile 不存在,则自动生成。
        • 在标准位置自动创建 virtualenv。
        • 在卸载/安装包时自动将包添加/删除到 Pipfile。
        • 自动加载 .env 文件(如果存在)。

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

        其他命令

        • check 检查安全漏洞并断言当前环境正在满足 PEP 508 要求。 (我认为这是一个很棒的功能,尤其是在此之后 - Malicious packages on PyPi
        • graph 将向您显示已安装依赖项的依赖关系图。

        您可以在此处阅读更多信息 - Pipenv

        安装

        可以找到安装文档here

        PS:如果您喜欢使用 Python 包 requests,您会很高兴知道 pipenv 是由同一开发者 Kenneth Reitz

        【讨论】:

          【解决方案12】:

          在 2019 年,poetry 是您正在寻找的包和依赖管理器。

          https://github.com/sdispater/poetry#why

          它现代、简单且可靠。

          【讨论】:

            【解决方案13】:

            Poetry 是您正在寻找的。它负责依赖管理、虚拟环境、运行。

            【讨论】:

              猜你喜欢
              • 2015-07-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-02-06
              • 1970-01-01
              • 2011-08-31
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多