Python 包管理工具解惑

Python-2.7.3/Modules/Setup.dist Python2.7.3 交叉编译 static 立即下载

本文转载自:Python 包管理工具解惑

一、困惑

作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑)。主要表现在下面几个方面:

  1. 这几个包管理工具有什么不同?
    • distutils
    • setuptools
    • distribute
    • disutils2
    • distlib
    • pip
  2. 什么时候该用pip,什么时候该用 setup.py ,它们有关系么?
  3. easy_install、ez_setup.py、setup.py、setup.cfg 分别都是干啥的?
  4. wheel 和 pip 的关系?
  5. Egg 和 whl 的关系?
  6. 如何发布自己的模块(发布到PyPI)?
  7. 如何进行模块的私有发布(不发布到PyPI)?

为了弄清这些问题,我找了许多资料。最后发现最好的资料还是 python 的官方文档。

下面是阅读了所有我找到的资料后的一个总结,希望能帮到几个月后又把这些全部忘光的那个自己。

二、python 包管理工具大乱斗

我用时间顺序来描述乱斗过程。

1. distutils

distutils 是 python 标准库的一部分,2000年发布。使用它能够进行 python 模块的 安装 和 发布。

setup.py 就是利用 distutils 的功能写成,我们可以看一个简单的 setup.py 的例子。

在这里可以看到关于 setupt.py 格式的所有详细描述:Writing the Setup Script。

要安装一个模块到当前的 python 环境中,可以使用这个模块提供的 setup.py 文件:

python setup.py install

下面的代码会发布一个 python 模块,将其打包成 tar.gz 或者 zip 压缩包:

python setup.py sdist

甚至能打包成 rpm 或者 exe 安装包:

python setup.py bdist_rpm
python setup.py bdist_wininst

2. setuptools 和 distribute

setuptools 是一个为了增强 distutils 而开发的集合,2004年发布。它包含了 easy_install 这个工具。

ez_setup.py 是 setuptools 的安装工具。ez 就是 easy 的缩写。

简单的说,setuptools 是一个项目的名称,是基础组件。而 easy_install 是这个项目中提供的工具,它依赖基础组件工作。

为了方便描述,下面文章中提到的 setuptools 被认为与 easy_install 同义。

使用 setuptools 可以自动 下载、构建、安装和管理 python 模块。

例如,从 PyPI 上安装一个包:

easy_install SQLObject

下载一个包文件,然后安装它:

easy_install http://example.com/path/to/MyPackage-1.2.3.tgz

从一个 .egg 格式安装:

easy_install /my_downloads/OtherPackage-3.2.1-py2.3.egg

distribute 是 setuptools 的一个分支版本。分支的原因可能是有一部分开发者认为 setuptools 开发太慢了。但现在,distribute 又合并回了 setuptools 中。因此,我们可以认为它们是同一个东西。事实上,如果你查看一下 easy_install 的版本,会发现它本质上就是 distribute 。

# easy_install --version
distribute 0.6.28

3. Eggs

Eggs 格式是 setuptools 引入的一种文件格式,它使用 .egg 扩展名,用于 Python 模块的安装。

setuptools 可以识别这种格式。并解析它,安装它。

想要详细了解,可以看看这篇:The Quick Guide to Python Eggs。

Eggs are to Pythons as Jars are to Java..

4. pip

注意,从此处开始,easy_install 和 setuptools 不再同义。

pip 是目前 python 包管理的事实标准,2008年发布。它被用作 easy_install 的替代品,但是它仍有大量的功能建立在 setuptools 组件之上。

pip 希望不再使用 Eggs 格式(虽然它支持 Eggs),而更希望采用“源码发行版”(使用 python setup.py sdict 创建)。这可以充分利用 Requirements File Format 提供的方便功能。

pip 可以利用 requirments.txt 来实现在依赖的安装。在 setup.py 中,也存在一个 install_requires 表来指定依赖的安装。它们的区别在哪里?可以看这篇文章:setup.py vs requirements.txt (中文版)。

pip 支持 git/svn/hg 等流行的 VCS 系统,可以直接从 gz 或者 zip 压缩包安装,支持搜索包,以及指定服务器安装等等功能。

pip vs easy_install 详细介绍了两者的不同。它们可以说是各占胜场,但 pip 明显优势更大。

5. wheel

wheel 本质上是一个 zip 包格式,它使用 .whl 扩展名,用于 python 模块的安装,它的出现是为了替代 Eggs。

wheel 还提供了一个 bdist_wheel 作为 setuptools 的扩展命令,这个命令可以用来生成 wheel 包。

pip 提供了一个 wheel 子命令来安装 wheel 包。当然,需要先安装 wheel 模块。

setup.cfg 可以用来定义 wheel 打包时候的相关信息。

Wheel vs Egg 详细介绍了 wheel 和 Eggs 格式的区别,很显然,wheel 优势明显。

Python Wheels 网站展示了使用 Wheels 发行的 python 模块在 PyPI 上的占有率。

pypip.in 也支持 wheel。

6. distutils2 和 distlib

distutils2 被设计为 distutils 的替代品。从2009年开发到2012年。它包含更多的功能,并希望以 packaging 作为名称进入 python 3.3 成为标准库的一部分。但这个计划 后来停滞了 。

distlib 是 distutils2 的部分,它为 distutils2/packaging 提供的低级功能增加高级 API,使其便于使用。

这里 介绍了 distlib 没有进入 python 3.3 标准库的一些原因。

因此,可以暂时不必了解这两个工具,静观其变即可。

三、工具选择

如果仔细看过上面的乱斗内容,我相信你已经清楚当前应该如何选择了。

对于我这样刚刚开始的新手来说,自然是使用 pip 而不使用 easy_install 了。

如果发布模块,当然是使用 wheel 格式。

四、发布自己的模块

对于 python3 程序员来说,当然应该先看这一篇:Distributing Python Modules。

另外,Tutorial on Packaging and Distributing Projects 也足够详细和官方。

而 Python2 程序员则应该看这篇 Distributing Python Modules 。

当然,setuptools 的官方文档也是不错的教程:Building and Distributing Packages with Setuptools 。

这篇教程可以用来入门:Sharing Your Labor of Love: PyPI Quick and Dirty

至于如何发布自己的模块到 PyPI 或者搭建自己的私有包管理服务器,上面的文章已经讲得非常清楚了。

五、引用

上面提到的大部分资料,都是在这里找到,或者是提到:Python Packaging User Guide。

感谢这篇文章,让我不再纠结,然后又下决心写了本文继续纠结:Differences between distribute, distutils, setuptools and distutils2? 。

这篇文章也比较碎:关于python中的setup.py,而且比本文范例更多。

FPGA实战:从零构建eMMC控制器(Verilog篇) 本文详细介绍了如何使用Verilog从零构建FPGA上的eMMC控制器,涵盖eMMC接口基础、命令系统解析、关键模块设计及性能优化技巧。通过实战案例,帮助开发者掌握高速数据存储解决方案,提升嵌入式系统开发能力。 阅读详情

相关推荐

从零到一:高通Memory QMVS测试环境搭建的避坑指南

本文详细介绍了高通Memory QMVS测试环境搭建的全流程避坑指南,涵盖硬件选择、软件配置、QMVS核心组件安装及测试执行技巧。重点解析了adb工具配置、QPST日志抓取等关键步骤,帮助工程师高效搭建稳定测试环境,避免常见兼容性和稳定性问题。

weixin_29251567的博客 557

python中有很多包管理工具有哪些不是_理解Python包管理工具

distlibDistlib是一个库,用于实现与Python软件的打包和分发有关的低级功能。它包含在打包的Python软件包中的部分功能,该软件包原本打算作为Python 3.3的一部分发布,但在Python 3.3进入Beta测试之前不久就被删除了。这个计划目前已停滞。distutils由于维护包装系统(其中功能更新与语言运行时更新紧密耦合)带来的挑战,现在不鼓励直接使用distutils,最好...

weixin_36301989的博客 697

SIMPLIS实战:从零构建理想BUCK电路,精准计算与POP稳态分析

本文详细介绍了如何使用SIMPLIS软件从零开始构建并仿真一个理想的BUCK降压电路。通过设定关键参数、计算理想器件值,并搭建仿真模型,文章重点演示了暂态仿真以观察电路上电过程,并深入讲解了高效的POP(周期性工作点)稳态分析技术,帮助工程师快速验证设计、评估稳态性能,从而加速电源设计迭代。

weixin_29165465的博客 395

Python依赖管理那点事

关于Python依赖管理的一些碎碎念。

Hanniel的博客 4273

RP Fiber Power 版本

RP Fiber Power的版本历史 该软件一直受到多年来广泛的发展计划,这大大扩展了其功能,以及用户界面的质量。 V1 这是第1个版本。 它仅限于光纤激光器和放大器的连续波计算,并且只能通过脚本进行控制。 V2 版本2引入了交互式表单。 至少对于更简单的模拟,现在可以简单地通过填写表单来工作,而V1必须通过脚本来控制。 例如,屏幕截图显示了输入某些信号参数的表单: 当您基于这些表单执行计算时,程序将根据您的表单输入自动编写脚本文件,然后执行该脚本。如果您需要编写脚本以获得更大的灵活性,可以稍后查看该脚

Asdmath的博客 2431

Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏)

GUI 类是 Unity GUI 的接口,并且具有手动定位功能。“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数即时模式 GUI 系统常用于:创建游戏内调试显示和工具。为脚本组件创建自定义检视面板。创建新的编辑器窗口和工具以扩展 Unity 本身。

游戏开发小Y的博客 12万+

Python 包管理

一、写在前面这篇文章主要介绍了Python的包管理,学习过程中主要参考官网以及自己的理解,整理成笔记以便后续自己查阅。 如果转载,请保留作者信息。 邮箱地址:jpzhang.ht@gmail.com 二、python 包管理工具介绍(1)distutils:distutils 是 python 标准库的一部分,2000年发布。提供了建立和安装额外的模块集成到一个Python安装。使用它能够进

JP.Zhang 1365

100天精通Python(爬虫篇)——第119天:基于selenium实现隐藏浏览器指纹特征(反反爬策略)

1. 什么是浏览器指纹? 2. 爬虫隐藏浏览器指纹特征的好处? 3. 手动打开浏览器指纹情况 4. 无界面模式打开浏览器 5. 脚本隐藏浏览器指纹特征

努力让自己发光,对的人才能迎着光而来 8万+

安装python遇到错误_安装Python时遇到如下问题,解决方案

~$ sudo apt-get install python-pip正在读取软件包列表... 完成正在分析软件包的依赖关系树正在读取状态信息... 完成python-pip 已经是最新的版本了。升级了0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 233个软件包未被升级。有8个软件包没有被完全安装或卸载。解压缩后会消耗掉0B 的额外空间。您希望继续执行吗? [Y/n] Y正在设置 ...

weixin_39908462的博客 802

Linux 内核参数:meminfo

内存管理是一个相对复杂的内核模块,错综复杂的数据结构和管理逻辑。Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。本文要分析的节点meminfo是Linux 操作系统中查看系统内存最准确(meminfo 中有内存黑洞)的方法,它包含当前时刻系统的所有物理页面的信息。

私房菜 2414

Android Binder的两三事--基于Android14源码

Android14-Framework-Binder

保持专注,保持热爱 1140

Python包管理工具

Python的包管理工具是Python生态系统中至关重要的组成部分,它们帮助开发者安装、管理和分发Python包。下面我将详细介绍Python的主要包管理工具及其使用方法。

m0_37996323的博客 700

爬虫反爬:一文掌握 BotBrowser 的原理和使用(能绕过很多验证码的指纹浏览器)

BotBrowser是使用经过修改的Chromium内核(修改Chromium的C++源代码)的隐形浏览器,可靠地绕过Cloudflare、Shape、PerimeterX、Datadome、Akamai、Kasada、hCaptcha和reCAPTCHA。BotBrowser是一个跨平台的自动化工具,它重新定义了web自动化。专为爬虫、RPA(机器人流程自动化)和 Web 测试设计。与 Puppeteer/Selenium 不同,它通过无头模式(Headless)和API 级控制。

数据知道的博客 1万+

Python常用包管理工具以及详解

在Python的生态系统中,包管理工具起着至关重要的作用.它们简化了软件包的安装、更新、卸载和依赖管理.本文将介绍几种常见的Python包管理工具,并提供使用示例.

GLB_0627的博客 2779

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python 包管理工具 uv

Python 包管理工具 **uv** 是由 Astral 团队(知名工具 Ruff 的开发者)基于 Rust 开发的新一代工具,旨在通过高性能和一体化设计革新 Python 生态的依赖管理体验

漫谈网络 1807

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【Python】Curdling:Python 包管理的高效工具

Curdling 是一个轻量级的 Python 包管理工具,旨在加速 Python 包的安装和管理流程。与传统的包管理工具(如 `pip`)相比,Curdling 更加注重性能优化和效率,特别是在处理大规模依赖项和项目构建时表现优异。它通过并行化的包安装方式,大大减少了安装时间,并提供了与 `pip` 类似的功能,包括安装、更新和删除 Python 包。

Unity打怪升级 986

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Python的包管理工具

转载于:http://www.th7.cn/Program/Python/201404/192439.shtml 最近刚好在研究python,在安装过程中遇到一些问题,记下作为笔记,便于以后学习。 刚开始学习Python时,看资料和别人介绍中提到过,安装Python的包有的用easy_install, setuptools, 有的使用pip,distribute。现在把这些

winniay的专栏 1307

python的包管理工具-pip

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。使用 pip 可以安装、卸载、升级和管理 Python 包。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

Trb201012的博客 1946

【python】Poetry 包管理工具详解

摘要: Poetry 是 Python 的现代化一站式工具,整合了依赖管理(pyproject.toml + 自动锁定版本)、虚拟环境管理(无需手动操作)和打包发布功能。相比传统 pip+virtualenv,它通过声明式配置和锁文件解决依赖混乱问题,支持多环境隔离与一键发布到 PyPI。核心优势包括自动版本解析、可重现性强及简化工作流,但需适应新的配置语法。适用于追求高效、标准化开发的 Python 项目。 关键词: Poetry、Python 依赖管理、虚拟环境、打包工具、pyproject.toml

言之。 1万+

Python——常用的包管理工具

python包管理工具的介绍

weixin_49095243的博客 1030

03 python包管理工具——uv

一个速度极快的 Python 包和项目经理,用 Rust 编写。

weixin_54388827的博客 1719

python中有很多包管理工具有哪些不是_Python之包管理工具

在Python环境中已经有很多成熟的包,可以通过安装这些包来扩展我们的程序。例如,很多时候Python开发人员都会去PyPI网站去查找自己想要使用的包,然后进行安装。PyPI ( Python Package Index)是获得第三方 Python 软件包以补充标准库的一个站点。在安装Python包的过程中,经常涉及到distutils、setuptools、distribute、setup.py...

weixin_39686353的博客 663

python中有很多包管理工具有哪些不是_Python的包管理工具

转载于:http://www.th7.cn/Program/Python/201404/192439.shtml最近刚好在研究python,在安装过程中遇到一些问题,记下作为笔记,便于以后学习。刚开始学习Python时,看资料和别人介绍中提到过,安装Python的包有的用easy_install, setuptools, 有的使用pip,distribute。现在把这些相关的资料整理一下,能更清晰...

weixin_35520863的博客 572

Python 包管理工具pip

pip是 Python 开发中不可或缺的工具,掌握它的基本用法可以极大地提高开发效率。无论是安装、升级还是管理依赖,pip都能轻松胜任!

鸭梨的博客 1101

python最常用的包管理工具是什么_细说Python的包管理工具

在看文档和别人的blog介绍安装包有的用easy_install, setuptools, 有的使用pip,distribute,那麽这几个工具有什么关系呢,看一下下面这个图就明白了。可以看到distribute是setuptools的取代,pip是easy_install的取代。下面简单的介绍一下:Distribute是对标准库disutils模块的增强,我们知道disutils主要是用来更加容...

weixin_39525355的博客 472

python中有很多包管理工具那中不是_Python 包管理工具解惑

本站文章除注明转载外,均为本站原创或者翻译。本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;本博客采用 WPCMD 维护;本文标题:Python 包管理工具解惑一、困惑作为一个 Python 初学者,我在包管理上感到相当疑惑(嗯,是困惑)。主要表现在下面几个方面:这几个包管理...

weixin_39742065的博客 745
上一篇: Python 3 爬虫之抓取当当网特价书名
下一篇: Python 3 安装 lxml 报错Unable to find vcvarsall.bat的解决方法
KingLearnJava
博客等级 码龄12年 93粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值