setuptools、distribution 和 pip 之间如何相互关联?

2024-01-12

我一直在通过《Learn Python The Hard Way》(第二版)一书自学 Python。在练习 46 中,它告诉我阅读 Pip、Distribute 和其他一些软件包。

pip 的文档足够清楚了。它允许我安装/卸载和升级软件包。阅读分发文档,它基本上似乎做了同样的事情:

Easily download, build, install, upgrade, and uninstall Python packages

pip 和 Distribution 之间有什么区别,它们之间有何关系?


[2014 年 10 月 TL;博士: distribute已死,使用pip, 新的setuptools,并且,对于二进制发行版,wheels。更多内容见下文。]


[原答案]

Distribute http://pypi.python.org/pypi/distribute is was a fork of the older setuptools http://pypi.python.org/pypi/setuptools so nearly all comments that follow apply equally to Distribute and setuptools. Setuptools was an attempt to fill in a number of holes in the even older Python standard library package, Distutils http://docs.python.org/3/distutils/index.html. Setuptools added functions like automatic downloads of packages via a command-line interface, easy_install, and some level of dependency management. However, a segment of the Python community is of the opinion that setuptools is too intrusive and has too much behind-the-scenes magic for some of its features.

pip是 setuptools 或 Distribute 之上的更高级别接口。它使用它们来执行许多功能,但避免了一些更有争议的功能,例如拉链鸡蛋。pip还提供了不可用的功能setuptools,例如卸载命令以及定义固定要求集并可靠地重现一组包的能力。有更完整的功能对比here http://pypi.python.org/pypi/pip.

为什么有这么多组件(还有更多,比如buildout http://www.buildout.org/)?有很多原因:解决方案必须适用于支持 Python 的所有主要平台(即 Unix-y、Windows、Mac OS X),因此构建和安装需要一个complex一系列问题;与许多开源项目一样,Python 本质上是全志愿者的,许多开发人员只是对打包和安装问题不太感兴趣;在向标准库添加未经证实的主要新功能方面存在着天然的保守主义;意见分歧等等。

目前,有一个项目正在进行中,旨在提供 Distutils 的替代品,并可能提供一些更高级别的附加组件。计划作为Python 3.3标准库发布packaging http://docs.python.org/dev/library/packaging.html包并作为旧版本 Python 的附加组件Distutils2 http://pypi.python.org/pypi/Distutils2/.

总结一下,目前的关系是:

pip -> [ setuptools | Distribute ] -> Distutils -> Python core
                                    |
    3rd party packages              |      included in Python
                                    |

更新(2012-07):在 Python 3.3 的功能代码截止之前,决定packaging尚未准备好在标准库中发布,因此已从 3.3 版本中删除。工作将继续进行Distutils2可通过 PyPI 获取,以及 Python 3.4 标准库中将包含的内容。


更新(2014-10):自上次更新此答案以来,Python 打包领域发生了进一步的变化。

  • 最重要的是,自2013年中期以来,双方之间的裂痕setuptools and distribute已痊愈并开展活动已合并 进入一个新的setuptools project http://pythonhosted.org//setuptools/merge.html. distribute就是现在 已弃用且不再维护;使用新的setuptools反而 但不要使用它的easy_install作为安装人员。

  • pip已成为事实上的、受祝福的安装工具(对于 Python 您平台的包管理器未另外提供的包) 在虚拟环境之内或之外(virtualenv http://virtualenv.readthedocs.org/en/latest/ or pyvenv https://docs.python.org/3/library/venv.html).

  • 而不是旧的setuptools bdist eggs, wheels https://pip.pypa.io/en/latest/reference/pip_wheel.html有 成为 Python 包的受祝福的二进制分发格式。

  • 从 Python 3.4 开始 http://www.python.org/dev/peps/pep-0453/, 的一个版本pip https://docs.python.org/3/library/ensurepip.html with wheel支持 现在已经和官方一起发货了python.org二进制安装程序和 源码包,预计pip也将是 包含在Python 2.7 的下一个维护版本 http://www.python.org/dev/peps/pep-0477/(2.7.9)。

  • Distutils2 and packaging现在处于休眠状态。

新版中有更多详细信息分发 Python 模块 https://docs.python.org/3/distributing/index.htmlPython 3 文档的部分和新的Python 打包用户指南 https://packaging.python.org/en/latest/index.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setuptools、distribution 和 pip 之间如何相互关联? 的相关文章

  • 操作数无法与形状 (128,) (0,) 错误一起广播

    我正在尝试实现面部识别登录系统 但出现错误 操作数无法与形状 128 0 一起广播 我不知道什么或如何解决它 这是我已实现的 view py 和 FaceDetector py 以及我从服务器收到的错误 errors Traceback m
  • python导入模块时如何避免一直写模块名?

    我用math最近模块很多 我不想写math sqrt x and math sin x 每时每刻 我想缩短它并写sqrt x and sin x How 对于较长的模块名称 通常会缩短它们 例如 import numpy as np 然后您
  • Python Nose 导入错误

    我似乎无法理解鼻子测试框架 https nose readthedocs org en latest 识别文件结构中测试脚本下方的模块 我已经设置了演示该问题的最简单的示例 下面我会解释一下 这是包文件结构 init py foo py t
  • DataFrame 在函数内部修改

    我面临一个我以前从未观察到的函数内数据帧修改的问题 有没有一种方法可以处理这个问题 以便初始数据帧不被修改 def test df df tt np nan return df dff pd DataFrame data 现在 当我打印时d
  • Spark MLlib - 训练隐式警告

    我在使用时不断看到这些警告trainImplicit WARN TaskSetManager Stage 246 contains a task of very large size 208 KB The maximum recommend
  • 将 API 数据存储到 DataFrame 中

    我正在运行 Python 脚本来从 Interactive Brokers API 收集金融市场数据 连接到API后 终端打印出请求的历史数据 如何将数据保存到数据帧中而不是在终端中流式传输 from ibapi wrapper impor
  • Python sqlite3游标没有属性commit

    当我运行这段代码时 path Scripts wallpapers single png conn sqlite3 connect Users Heaven Library Application Support Dock desktopp
  • conda 无法从 yml 创建环境

    我尝试运行下面的代码来从 YAML 文件创建虚拟 Python 环境 我在 Ubuntu 服务器上的命令行中运行代码 虚拟环境名为 py36 当我运行下面的代码时 我收到下面的消息 环境也没有被创建 这个问题是因为我有几个必须使用 pip
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的
  • 网页抓取 - 前往第 2 页

    如何访问数据集的第二页 无论我做什么 它都只返回第 1 页 import bs4 from urllib request import urlopen as uReq from bs4 import BeautifulSoup as sou
  • str.translate 给出 TypeError - Translate 采用一个参数(给定 2 个参数),在 Python 2 中工作

    我有以下代码 import nltk os json csv string cPickle from scipy stats import scoreatpercentile lmtzr nltk stem wordnet WordNetL
  • 如何从 Python 中指定运行程序的输入文件?

    我正在编写一个外部脚本 以通过笔记本电脑上的 Python mrjob 模块 而不是在 Amazon Elastic Compute Cloud 或任何大型集群上 运行 mapreduce 作业 我读自mrjob文档 http packag
  • Python 视频框架

    我正在寻找一个 Python 框架 它将使我能够播放视频并在该视频上绘图 用于标记目的 我尝试过 Pyglet 但这似乎效果不是特别好 在现有视频上绘图时 会出现闪烁 即使使用双缓冲和所有这些好东西 而且似乎没有办法在每帧回调期间获取视频中
  • 从 IMDbPy 结果中的片目中获取电影 ID

    我正在尝试创建一个数据集 允许我根据 Python IMDb API 中的演员 ID 和电影 ID 加入演员和电影 现在 我正在尝试从演员的电影作品中提取电影 ID 列表 但无法做到 例如 我知道 Rodney Dangerfield 在
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • Jupyter Notebook:没有名为 pandas 的模块

    我搜索了其他问题 但没有找到任何有帮助的内容 大多数只是建议您使用 conda 或 pip 安装 pandas 在我的 jupyter 笔记本中 我试图导入 pandas import pandas as pd 但我收到以下错误 Modul
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • 如何使用Featuretools按列值从单个数据框中的多个列创建特征?

    我正在尝试根据之前的结果来预测足球比赛的结果 我在 Windows 上运行 Python 3 6 并使用 Featuretools 0 4 1 假设我有以下代表结果历史记录的数据框 原始数据框 https i stack imgur com
  • 获取调用者文件的绝对路径

    假设我在不同的目录中有两个文件 1 py 比如说 在C FIRST FOLDER 1 py and 2 py 比如说 在C SECOND FOLDER 2 py 文件1 py进口2 py using sys path insert 0 pa
  • 在Python 3.2中,我可以使用http.client打开并读取HTTPS网页,但urllib.request无法打开同一页面

    我想打开并阅读https yande re https yande re with urllib request 但我收到 SSL 错误 我可以使用以下方式打开并阅读页面http client用这个代码 import http client

随机推荐

  • Bootstrap:居中 col-md-5?

    我觉得这是一个很奇怪的问题 但我似乎无法在网上找到解决方案 如果我有一个col md 5 我似乎无法将其居中 据我了解网格系统 如果我选择列大小 1 12 为了控制列的位置 我使用 col offset 所以如果我有一个col md 4 我
  • Dart 运行时检查 switch 语句中的类型

    我在尝试检查 Dart 中某些对象的运行时类型时发现了一些奇怪的行为 让我们举一个简单的例子 main List
  • 如何以编程方式将最小化的无模式 WinForm 带到之前显示的位置?

    为了在单击事件时将无模式 Windows 窗体恢复到其先前的位置 我尝试使用下面所示的代码 但它不起作用 如果我遗漏了什么 请告诉我 public void SetFocus this Focus this BringToFront if
  • MVC 3 从 web.config 中的 AppSettings 获取值

    在普通的 ASP NET Web 表单站点中 我会使用 web configs appsettings 将应用程序设置数据添加到站点 但是 在使用 MVC 3 时 我无法以这种方式检索设置值 首先 有 2 个 web config 文件 第
  • wx.TextCtrl(或底层 GTK+)的多线程问题

    我正在开发一个GUI来启动外部长期运行的后台程序 该后台程序可以通过 stdin 给出输入命令 并使用 stdout 和 stderr 来保持打印输出和错误消息 我在 GUI 中使用 wx TextCtrl 对象来提供输入和打印输出 我当前
  • 允许图像缩小,但不允许拉伸

    我的网站有 4 000 多个页面 每页有 10 个或更多不同大小的 jpeg 图像 我正在努力使该网站对移动设备更加友好 为此 我希望能够缩小图像以适应较小的屏幕 我知道我可以做这样的事情来表明图像可以缩小 img bodyImg widt
  • 下载图像并在 BlackBerry 上显示

    我必须开发一个网址 其中涉及从网址下载图像并在黑莓刺激器中显示 任何人都可以在这方面帮助我吗 此代码将连接给定的 URL 并返回 Bitmap 对象 public static Bitmap connectServerForImage St
  • LINQ 表达式> 相当于 .Contains()

    有谁知道如何使用 Linq 表达式创建 Contains string 函数 甚至创建谓词来完成此操作 public static Expression
  • 如何仅使用 CSS 制作选项卡? [复制]

    这个问题在这里已经有答案了 我正在寻找像这样的选项卡系统jQuery 选项卡 http jqueryui com tabs 用户可以在不同的面板之间切换以查看不同的内容 但是 我需要在不使用 JavaScript 的情况下完成此操作 以便未
  • C/C++ 是否有允许任意精度指数的任意精度浮点库?

    我正在寻找 C C 的任意精度浮点库 首选普通 C 我需要任意精度的指数 GMP 和 MPFR 使用固定大小的指数 因此它们不符合条件 我有一些解决方法的想法 但我更喜欢开箱即用的解决方案 如果指数精度可以自动调整以防止无穷大值 那将是一个
  • Django DRF,如何使用 DRF 操作正确注册自定义 URL 模式

    背景 我有一个定义了多个自定义操作的 ModelViewSet 我正在使用我的默认路由器urls py注册 URL 现在 我的视图使用默认创建的路由 例如 images images pk 为了让用户能够使用他们熟悉的资源名称来使用 API
  • Matlab 中 += 相当于什么?

    在Matlab中是否可以增加变量的值而不在语句的右侧重新声明它 AFAIK MATLAB 中没有这样的东西 这是可以理解的 http groups google com group comp soft sys matlab browse f
  • ForEach-Object -Parallel 参数集无法解析

    使用 powershell 并执行以下操作时本文 https devblogs microsoft com powershell powershell foreach object parallel feature 运行以下示例会引发错误
  • ColdFusion 并从 MySQL 获取数据

    我正在 CF 网站上工作 需要从 MySQL 表中获取数据 我可以很好地创建 CFQuery 并检查返回的记录 但如何获取返回的记录并循环它们并从每行中的特定字段获取数据 我可以写 while if end if 等 我只是不记得如何访问数
  • 指向索引处向量的指针与迭代器

    我有一个矢量 myvec我在代码中使用它来保存内存中的对象列表 我在 正常 向量中保留一个指向当前对象的指针C时尚通过使用 Object pObj myvec index 如果 myvec 没有变得足够大以至于无法在某个过程中移动 那么这一
  • 使用 NodeJS 的 IExpress 安装后批处理未立即找到 NPM

    我正在尝试使用 iExpress 在我在 NodeJS 上创建的小脚本上安装依赖项 iExpress 包只需安装 Node 包 msiexec i node msi 然后运行安装后批处理 将 Javascript 放入 UserProfil
  • API 级别 19 上 grantUriPermission 中的 IllegalArgumentException

    下面这行代码 context getApplicationContext grantUriPermission packageName uri Intent FLAG GRANT PERSISTABLE URI PERMISSION 在 A
  • 为什么 mypy 拒绝我的“混合联合”类型声明?

    While 解决 Python 聊天中的半相关问题 https chat stackoverflow com transcript message 49920836 49920836 我在 mypy 中发现了一些我不理解的行为 from t
  • Hive 执行钩子

    我需要在 Apache Hive 中挂钩自定义执行挂钩 如果有人知道该怎么做 请告诉我 我当前使用的环境如下 Hadoop Cloudera 版本 4 1 2 操作系统 Centos 谢谢 阿伦 有多种类型的挂钩 具体取决于您要在哪个阶段注
  • setuptools、distribution 和 pip 之间如何相互关联?

    我一直在通过 Learn Python The Hard Way 第二版 一书自学 Python 在练习 46 中 它告诉我阅读 Pip Distribute 和其他一些软件包 pip 的文档足够清楚了 它允许我安装 卸载和升级软件包 阅读