python模块版本管理工具_【转】Python包管理工具

Python 包管理工具解惑

本站文章除注明转载外,均为本站原创或者翻译。

本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;

本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;

本博客采用 WPCMD 维护;

本文标题:Python 包管理工具解惑

一、困惑

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

这几个包管理工具有什么不同?

distutils

setuptools

distribute

disutils2

distlib

pip

什么时候该用pip,什么时候该用 setup.py ,它们有关系么?

easy_install、ez_setup.py、setup.py、setup.cfg 分别都是干啥的?

wheel 和 pip 的关系?

Egg 和 whl 的关系?

如何发布自己的模块(发布到PyPI)?

如何进行模块的私有发布(不发布到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_rpmpython 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 --versiondistribute 0.6.28

3. Eggs

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

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

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 sdist 创建)。这可以充分利用 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。

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

五、引用

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

关联文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最小值c语言 循环,C语言循环结构 -C语言求全班同学身高的最大值和最小值

编写程序,帮桐桐找出全班同学身高的最大值和最小值。问题分析输入:班级总人数;依次输入班上每位同学的身高值(float型)。输出:最大身高值和最小身高值(float型)。这是一个依次比较大小的问题,具体步骤为:1)…

vim替换^m字符

替换^M字符在Linux下使用vi来查看一些在Windows下创建的文本文件,有时会发现在行尾有一些“^M”。有几种方法可以处理。 1.使用dos2unix命令。一般的分发版本中都带有这个小工具(如果没有可以根据下面的连接去下载),使用起来很方便…

数据挖掘 python框架_8个最高效的Python爬虫框架

1.ScrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。2.PySpiderpyspider 是一个用python实现的功能强大…

病毒c语言代码大全,谁有C语言编写的病毒源代码?

一个c病毒源代码#include #include #include #include #include #pragma comment(lib,shlwapi.lib)#define TIMER 1//计时器//functionLRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程//获取盘符TCHAR FirstDriveFromMask (ULONG unitmask);//病毒从U盘启动时…

Android底层开发技术实战详解——内核、移植和驱动

《Android底层开发技术实战详解——内核、移植和驱动》基本信息作者: 王振丽 丛书名: Android移动开发技术丛书 出版社:电子工业出版社 ISBN:9787121175930上架时间:2012-8-13出版日期:2012 年8月开本&…

mysql select in 不存在返回0_MySQL索引优化看这篇文章就够了!

来源:cnblogs.com/songwenjie/p/9410009.html本文主要讨论MySQL索引的部分知识。将会从MySQL索引基础、索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开(本文图片可点开放大)。一、MySQL索引基础首先,我们将从索引基础开…

c语言文件实现通信录程序,学C三个月了,学了文件,用C语言写了个通讯录程序...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include #include #include struct QQ //结构体,有6个成员{char name[20];char age[5];char tel[15];char qq[15];char birth[12];char address[80];}user;void style()//窗口风格函数{system("mode con…

《软件测试实战:微软技术专家经验总结》

《软件测试实战:微软技术专家经验总结》 基本信息 作者: 史亮 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115345844 上架时间:2014-3-3 出版日期:2014 年2月 开本:16开 页…

websocket一直无法链接_.NET Core 实现基于Websocket的在线聊天室

什么是Websocket我们在传统的客户端程序要实现实时双工通讯第一想到的技术就是socket通讯,但是在web体系是用不了socket通讯技术的,因为http被设计成无状态,每次跟服务器通讯完成后就会断开连接。在没有websocket之前web系统如果要做双工通讯…

c语言既能读字母也能读数字,2014计算机二级考试C语言考前预测选择题

无忧考网为大家收集整理了《2014计算机二级考试C语言考前预测选择题》供大家参考,希望对大家有所帮助!!!1.结构化分析方法是面向( )的自顶向下、逐步求精进行需求分析的方法A.对象B.数据结构C.数据流D.目标2.对线性表进行二分法检…

生成 cone(锥体)

简介 生成 圆锥 代码 // CreateCone.cpp: 定义控制台应用程序的入口点。 //#include <iostream> #include <OpenMesh/Core/IO/MeshIO.hh> #include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh> #include<cmath> #include "AddPolygon.h" …

使用函数统计指定c语言,浙大版《C语言程序设计(第3版)》题目集 习题5-5 使用函数统计指定数字的个数...

热门文章推荐以下50道算法编程题访问量较大&#xff0c;包含常用语法&#xff0c;数据结构&#xff0c;解题思路等等&#xff0c;作为C语言学习者必练题目推荐给各位。创作不易&#xff0c;记得一键三连哦&#xff01;&#xff01;&#xff01;习题5-5 使用函数统计指定数字的个…

半监督分类算法_基于同质区和迁移学习的高光谱图像半监督分类

作 者 信 息赵婵娟&#xff0c;周绍光&#xff0c;丁 倩&#xff0c;刘丽丽(河海大学 地球科学与工程学院&#xff0c;江苏 南京 211100)“【摘要】针对高光谱遥感图像分类中标记样本难获取的问题&#xff0c;提出了一种基于同质区和迁移学习的新型半监督分类方法。首先对高…

【题解】Luogu P4052[JSOI2007]文本生成器 AC自动机

AC自动机上DP f[i][j]表示节点j,串长为i 当一个串的尾节点被标红或其fail指针指向的被标红&#xff0c;都是可读的 用总的减去不可读的即为答案 #include<iostream> #include<cstring> #include<cstdio> #include<queue> #define MOD (10007) #define …

在SQL Server中使用命令调用SSIS包

在SQL Server中可以使用dtexec命令运行SSIS包&#xff08;2005以上版本&#xff09;,当然也可以通过系统过程:xp_cmdshell调用dtexec运行SSIS包。 具体操作步骤如下&#xff1a; 1.首先&#xff0c;当然是要在Business Intelligence中设计好包&#xff0c;并调试通过。 2.然后&…

c语言 结构体数组嵌套另一个结构体数组怎么初始化?,如何初始化结构体数组(内嵌结构体)...

Keil 结构体变量初始化tujidi1csd25142016-09-30一维数组结构体数组结构体数组&#xff0c;通过改变指针类型改变访问数组的方式toto129748850424332014-08-01mfc结构体指针、结构体数组指针u01399024812292014-12-14memset结构体初始化shagua_nan184092016-03-16【C -> 容器…

本特利3500_本特利技术控的自我修养之 轴位移探头安装

正在学习之-客户答疑国家疫情当前&#xff0c;除了保护好自己、不给国家添麻烦以外我们能做的实在有限。上学时因为种种原因没有按家里的期望学医&#xff0c;也没有能够考上最喜欢的生物专业(理想中希望去非洲做动物类研究工作-跟拍狮子)至今还是憾事&#xff0c;但是加入本特…

map标签的详细使用参数

map标签必须成对出现&#xff0c;即 <map> ....</map> 同时map必须和area配合使用。 img标签里的usermap属性值必须与map标签里的id和name值完全一致 area标签&#xff1a;定义图片的点击区域 area 是单标签&#xff0c;不成对。 属性&#xff1a; accesskey 快捷键…

快捷方式修复_Mac上的屏幕截图不起作用该如何修复?

屏幕截图是Mac提供的内置功能&#xff0c;很少有它不起作用。但是由于某些意外的设置或硬件问题&#xff0c;Mac上的屏幕截图有时无法正常工作&#xff0c;这里提供的是Mac上的屏幕截图不起作用该如何修复&#xff1f;1.在Mac上启用屏幕快照快捷方式如果您按CMD SHIFT 3或CMD…

计算机二级2019年9月c语言题库,(3)2019年9月计算机二级C语言试题

当你的计算机知识还撑不起你的学习、工作时&#xff0c;那你就应该静下心来刷计算机等级考试题库-二级C语言试题。1)下列叙述中正确的是( )。A.解决同一个问题的不同算法的时间复杂度一般是不同的B.解决同一个问题的不同算法的时间复杂度必定是相同的C.对同一批数据作同一种处理…