Python 分发工具初探之 setuptools
admin
2023-07-31 00:40:02
0

这篇文章主要介绍了一下 setuptools 是什么,以及它的功能和特点,并且介绍了如何使用它来创建和安装使用自己的包,这篇文章仅仅讲了最基本的功能和用法,一些对于进阶的用法会在下篇文章中进行介绍。

0x00 setuptools 是什么

setuptools 与 disutils

我们通常所知道的 Python 分发工具是 Python distutils, setuptools 可以说是它的增强版,它能帮助我们更好的创建和分发 Python 的包,尤其是具有复杂依赖关系的包。对于开发者来说,能够更好的组织自己项目的分发和发布;对于用户来说,不需要安装 setuptools 也可以使用由它创建的包,只需要一个启动模块即可。

实现这样的的包管理机制主要由两部分构成:

  • 一个存储在 Python 官方网站的集中式仓库,名叫 Python Package Index(PyPI)
  • 另外就是基于 distutils 开发的 setuptools 包管理系统

它提供的内容包括:

  • 用来提供标准元数据字段:诸如作者名、版权类型等信息的骨架
  • 一组用来将包中的代码来构建软件安装包的辅助工具

distutils 仅仅适用于包,它无法定义包之间的依赖关系。但是 setuptools 通过添加一个基本的依赖系统以及许多相关功能,弥补了该缺陷。他还提供了自动包查询程序,用来自动获取包之间的依赖关系,并完成这些包的安装,大大降低了安装各种包的难度,使之更加方便。

相关功能

  • 利用 EasyInstall 自动查找、下载、安装升级依赖包
  • 能够创建 Python Eggs、
  • 包含目录中的数据文件和包,不需要在 setup() 函数中一一列举出来
  • 自动包含包内和发布有关的所有相关文件,而不用创建一个 MANIFEST.in文件
  • 自动生成经过包装的脚本
  • 支持Pyrex,即在可以 setup.py 中列出 .pyx 文件,而最终用户无须安装Pyrex
  • 支持上传到 PyPI
  • 可以部署开发模式,使项目在sys.path中
  • 用新命令或 setup() 参数扩展distutils,为多个项目发布/重用扩展
  • 在项目的 setup()中简单声明 entry points,创建可以自动发现扩展的应用和框架

0x01 安装 setuptools

Ubuntu:

1 sudo aptget install pythonsetuptools

Mac:

安装 wget:

12345 curl O http://ftp.gnu.org/gnu/wget/wget-1.13.4.tar.gztar xzvf wget1.13.4.tar.gzcd wget1.13.4./configuremakesudo make install

安装 setuputils:

12 wget http://peak.telecommunity.com/dist/ez_setup.pysudopython ez_setup.py

0x02 创建一个简单的包

创建一个空的包

新建一个 demo 目录

12 mkdir demo1cd demo1

在目录下新建 setup.py 文件

1234567 from setuptools import setup, find_packages setup(name = \’demo1\’,version = \’0.1\’,packages = find_packages(),)

将该项目打包

1 python setup.py bdist_egg

这时我们查看该项目目录:

1234567891011 demo1|build|   `bdist.macosx10.11intel|demo1.egginfo|  |dependency_links.txt|  |PKGINFO|  |SOURCES.txt|  `top_level.txt|dist|  `demo10.1py2.7.egg`setup.py

我们看到在 dist 目录中的就是生成的 egg 包,将其解压:

123456789101112 unzip l demo10.1py2.7.egg Archive:  demo10.1py2.7.eggLength     Date   Time    Name           1  032216 23:29   EGGINFO/dependency_links.txt177  032216 23:29   EGGINFO/PKGINFO124  032216 23:29   EGGINFO/SOURCES.txt1  032216 23:29   EGGINFO/top_level.txt1  032216 23:29   EGGINFO/zipsafe                   304                   5 files

以上的程序是最简单的一个 setup.py 程序,如果想要发布到 PyPI 就需要参考官方给出的示例:

12345678910111213141516171819202122232425262728 from setuptools import setup, find_packagessetup(name = \”HelloWorld\”,version = \”0.1\”,packages = find_packages(),scripts = [\’say_hello.py\’], # Project uses reStructuredText, so ensure that the docutils get# installed or upgraded on the target machineinstall_requires = [\’docutils>=0.3\’], package_data = {# If any package contains *.txt or *.rst files, include them:\’\’: [\’*.txt\’, \’*.rst\’],# And include any *.msg files found in the \’hello\’ package, too:\’hello\’: [\’*.msg\’],}, # metadata for upload to PyPIauthor = \”Me\”,author_email = \”me@example.com\”,description = \”This is an Example Package\”,license = \”PSF\”,keywords = \”hello world example examples\”,url = \”http://example.com/HelloWorld/\”,   # project home page, if any # could also include long_description, download_url, classifiers, etc.)

给包中添加内容

我们上边生成的 egg 是一个空的,没有实际的内容,现在我们来添加一些内容:

在项目目录新建一个目录:

12 mkdir testcd test

新建 __init__.py,加入如下代码:

1234567 #-*- coding:utf-8 -*- def test():print \”hello world!\”   if __name__ == \’__main__\’:test()

再次生成 egg 包:

1 python setup.py bdist_egg

查看 egg 包内容:

12345678910111213 unzip l demo10.1py2.7.eggArchive:  demo10.1py2.7.eggLength     Date   Time    Name    

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...