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

Python 是否有一个包/模块管理系统,类似于 Ruby 的 rubygems,您可以使用 gem install packagename

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

110949 次浏览

那就是 Easy _ install

它被称为 setuptools,可以使用“ easy _ install”命令运行它。

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

为了提供对比,还有 Pip

至少有两种,Easy _ install和它的继承者 Pip

作为一个 Ruby 和 Perl 开发人员以及学习 Python 的人,我还没有发现 easy _ install 或 pip 可以与 RubyGems 或 CPAN 相提并论。

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

Easy _ install 和 pip 使安装模块变得很容易。我通过浏览器搜索找到了它,或者通过其他方式了解了它,但是他们不告诉我有什么可用的模块。我可以明确地命名要更新的模块,但应用程序不会告诉我什么已经更新,也不会更新批量的一切,如果我想要的。

所以,在 pip 和 easy _ install 中有一些基本功能,但是缺少一些特性,我希望看到这些特性能够使它们更友好、更易于使用,并且与 CPAN 和 RubyGems 相当。

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

  • 安装的包裹: pip install MyProject
  • 更新一个包裹 pip install --upgrade MyProject
  • 到包的 修正一个版本

您可以按以下方式安装软件包管理器:

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

参考文献:

最近的进展

2014年3月 : 好消息!和皮普一起的 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 (Node 包管理器)的页面进行比较。

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

您将看到 RubyGems 和 Npm 页面都以一行对软件包的描述开始,然后是如何安装它的大型友好说明。

与此同时,任何天真地浏览 PyPI 的不幸的 Python 用户都要倒霉了。在 https://pypi.python.org/pypi/simplejson/上,他们找不到这样有用的说明。不过,这里有一个很大的绿色“下载”链接。跟随它并不是不合理的。啊哈,他们一拍即合!他们的浏览器下载 .tar.gz文件。许多 Windows 用户甚至不能打开它,但如果他们坚持,他们可能最终提取它,然后运行 setup.py,并最终在谷歌 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 列出 72000美元的包裹。令人尊敬的 Python 包索引列出了 只有41K

历史

面对“ 包括电池”的座右铭,Python 在2014年之前一直没有包管理器。

在匹普之前,行业标准只是一个命令。可悲的是,这远远不够。没有卸载软件包的命令。

皮普是一个巨大的进步。它具有 Ruby’s Gem 的大部分功能。不幸的是,直到最近,Pip 都很难安装。实际上,这个问题仍然是 Stack Overflow 上的一个顶级 Python 问题: “ 如何在 Windows 上安装 pip?

我在这里的其他答案中没有提到 MacPorts或者 自酿的,但是因为我确实在 Stack Overflow 的其他地方看到它们被用于相关问题,所以我会加上我自己的0.02美元,许多人似乎认为 MacPorts不仅仅是一般意义上的包管理器(到今天为止,他们列出了16311个包/端口,2931个匹配“ Python”,尽管只是针对 Mac) ,而且还是一个不错的(也许更好的) Python 包/模块的包管理器:

提问

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

答案

SciPy

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

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

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

choco install python

用更新的 PATH 打开一个新的 cmd-window

choco install pip

之后你就可以了

pip install pyside
pip install ipython
...

至少到2014年底,应该考虑使用 Conda包管理器的 连续统计分析公司的水蟒 Python 发行版。它通过一次内聚下载解决了人们在使用 Python 时遇到的大多数严重问题(管理不同的 Python 版本、更新 Python 版本、包管理、虚拟环境、 Windows/Mac 兼容性)。

它使您能够使用 Python 做几乎所有您想做的事情,而根本不需要更改系统。我的下一个首选解决方案是 pip + viralenv,但是您要么必须在系统 Python 中安装 viralenv (并且您的系统 Python 可能不是您想要的版本) ,要么安装 从源头构建。Anaconda 使整个过程成为点击一个按钮,以及添加一堆其他功能。

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

正如@ColonelPanic 提到的,< strong > Python 软件包索引 以及 Pip虚拟世界也存在一些问题。

Pipenv 解决了 pip 的大部分问题,并提供了其他特性。

Pipenv 特写

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

  • 启用真正确定的构建,同时只轻松指定您想要的。
  • 为锁定的依赖项生成和检查文件哈希。
  • 如果 pyenv 可用,则自动安装所需的 Python。
  • 通过查找管道文件,自动递归地找到项目主页。
  • 自动生成一个管道文件(如果不存在)。
  • 在标准位置自动创建 Virtual alenv。
  • 当软件包被卸载/安装时,自动添加/移除它们到管道文件中。
  • 如果.env 文件存在,则自动加载它们。

如果您以前从事过 Python 项目,那么您会意识到这些特性使得管理包变得更加容易。

其他命令

  • check检查安全漏洞并断言当前环境正在满足 PEP 508要求
  • graph将向您显示一个依赖关系图,显示您安装的依赖关系。

你可以在这里了解更多-Pipenv

安装

您可以找到安装文档 给你

附注: 如果您喜欢使用 Python 包 请求,那么您会很高兴知道 Pipenv是由同一个开发人员 Kenneth Reitz开发的

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

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

现代,简单,可靠。

诗歌 正是您所寻找的,它负责依赖管理、虚拟环境和运行。