建设学校网站需求分析,五寨网站建设,银川免费网站建设,长春网站营销Python 包管理工具解惑本站文章除注明转载外#xff0c;均为本站原创或者翻译。本站文章欢迎各种形式的转载#xff0c;但请18岁以上的转载者注明文章出处#xff0c;尊重我的劳动#xff0c;也尊重你的智商#xff1b;本站部分原创和翻译文章提供markdown格式源码#x…Python 包管理工具解惑本站文章除注明转载外均为本站原创或者翻译。本站文章欢迎各种形式的转载但请18岁以上的转载者注明文章出处尊重我的劳动也尊重你的智商本站部分原创和翻译文章提供markdown格式源码欢迎使用文章源码进行转载本博客采用 WPCMD 维护本文标题Python 包管理工具解惑一、困惑作为一个 Python 初学者我在包管理上感到相当疑惑(嗯是困惑)。主要表现在下面几个方面这几个包管理工具有什么不同distutilssetuptoolsdistributedisutils2distlibpip什么时候该用pip什么时候该用 setup.py 它们有关系么easy_install、ez_setup.py、setup.py、setup.cfg 分别都是干啥的wheel 和 pip 的关系Egg 和 whl 的关系如何发布自己的模块(发布到PyPI)如何进行模块的私有发布(不发布到PyPI)为了弄清这些问题我找了许多资料。最后发现最好的资料还是 python 的官方文档。下面是阅读了所有我找到的资料后的一个总结希望能帮到几个月后又把这些全部忘光的那个自己。二、python 包管理工具大乱斗我用时间顺序来描述乱斗过程。1. distutilsdistutils 是 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_wininst2. setuptools 和 distributesetuptools 是一个为了增强 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.eggdistribute 是 setuptools 的一个分支版本。分支的原因可能是有一部分开发者认为 setuptools 开发太慢了。但现在distribute 又合并回了 setuptools 中。因此我们可以认为它们是同一个东西。事实上如果你查看一下 easy_install 的版本会发现它本质上就是 distribute 。# easy_install --versiondistribute 0.6.283. EggsEggs 格式是 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. wheelwheel 本质上是一个 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 和 distlibdistutils2 被设计为 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而且比本文范例更多。关联文章