一 基本概念

1.什么是setuptools

setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。所谓分发,就是将自己做的包,安装到操作系统内。

强调一点,setuptools是在产生包时候用,到包创作完成后,用户在使用setuptools创建的包时,并不需要已安装setuptools,只要一个启动模块(__init__.py)即可。

2 setuptools功能亮点:

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

    总之,setuptools就是比distutils好用的多,基本满足大型项目的安装和发布

3 什么是python Eggs

python蛋,是用于将自己开发的安装包部署到操作系统环境下。由于python在全系统可见,因此,在python程序下,直接import  xxx就可以应用。python蛋就是python代码,用unzip解压后,一看便知。

二、安装setuptools

如果python环境没有setuptools,需要安装,下面推荐两个安装方法如下:

1) 方法1:最简单安装,假定在ubuntu下

  • sudo apt-get install python-setuptools

2) 方法2:启动脚本安装

  • wget http://peak.telecommunity.com/dist/ez_setup.py
  • sudo python ez_setup.py

三 实验1:创建一个工程,内部有一个程序,并安装到系统

1.创建一个简单的包

有了setuptools后,试图创建一个工程包demo.首先创建一个临时目录mydesk用以存放demo工程。在mydesk中,创建一个子目录(名叫demo),这就是工程的根路径。

cd /mydesk
mkdir demo
cd demo

demo是工程的根目录,进入demo,创建根目录的第一个文件:setup.py文件


from setuptools import setup, find_packages
setup(name = "demo",version = "0.1",packages = find_packages(),
)

在当前目录下,执行

python3 setup.py bdist_egg

注意这条命令,形如 “ python3 setup.py  xxx”  的命令很多,其中本地生成一个python-egg的命令就是xxx=bdist_egg。本地工程的“打包”动作完成。

ls

观察demo文件夹,发现setup.py旁边多了三个文件目录:build,demo.egg-info,dist,下面一一介绍其意义。

huatec@LAPTOP-J5TGQHQH:~/mydesk/demo$ tree
.
├── build
│   └── bdist.linux-x86_64
├── demo.egg-info
│   ├── PKG-INFO
│   ├── SOURCES.txt
│   ├── dependency_links.txt
│   └── top_level.txt
├── dist
│   └── demo-0.1-py3.8.egg
└── setup.py

【1】dist目录

在dist中生成的是egg包,这是一个将来部署到python系统的文件包,是主要组成部分。

file dist/demo-0.1-py2.7.egg
./dist/demo-0.1-py3.8.egg: Zip archive data, at least v2.0 to extract

看一下生成的.egg文件,是个zip包,解开看看先

~/mydesk/demo$   unzip -l ./dist/demo-0.1-py3.8.eggArchive:  ./dist/demo-0.1-py3.8.eggLength      Date    Time    Name
---------  ---------- -----   ----176  2021-11-10 09:36   EGG-INFO/PKG-INFO120  2021-11-10 09:36   EGG-INFO/SOURCES.txt1  2021-11-10 09:36   EGG-INFO/dependency_links.txt1  2021-11-10 09:36   EGG-INFO/top_level.txt1  2021-11-10 09:36   EGG-INFO/zip-safe
---------                     -------299                     5 files
huatec@LAPTOP-J5TGQHQH:~/mydesk/demo$

我们可以看到,里面是一系列自动生成的文件。现在可以介绍一下刚刚setup()中的参数了

name 包名
version 版本号
packages 所包含的其他包

要想发布到PyPI中,需要增加别的参数,这个可以参考官方文档中的例子了。

【2】 demo.egg-info目录

此文件夹下,包含所有的,对python-egg的描述文件,是次要组成部分。

【3】build目录

此目录是具有C++、C语言的程序,编译过后的可调用库存在的地方,在python下一般不用。此文件夹是工程的重要组成部分。

上面生成的egg中没有实质的内容,除了可以看看结构,没有实际意义,下面添加一点内容。

2.在简单的包内追加一个程序

在demo中执行mkdir demo,再创建一个目录,在这个demo目录中创建一个__init__.py的文件,表示这个目录是一个包,然后写入:

#!/usr/bin/env python
#-*- coding:utf-8 -*-def test():print("hello world!")if __name__ == '__main__':test()

现在的主目录结构为下:

demo
|-- demo
|   `-- __init__.py
`-- setup.py
再次执行python setup.py bdist_egg后,再看egg包$ unzip -l ./dist/demo-0.1-py3.8.eggArchive:  ./dist/demo-0.1-py3.8.eggLength      Date    Time    Name
---------  ---------- -----   ----176  2021-11-10 11:15   EGG-INFO/PKG-INFO137  2021-11-10 11:15   EGG-INFO/SOURCES.txt1  2021-11-10 11:15   EGG-INFO/dependency_links.txt5  2021-11-10 11:15   EGG-INFO/top_level.txt1  2021-11-10 11:15   EGG-INFO/zip-safe124  2021-11-10 11:12   demo/__init__.py379  2021-11-10 11:15   demo/__pycache__/__init__.cpython-38.pyc
---------                     -------823                     7 files

这回包内多了demo目录,显然已经有了我们自己的东西了.下一步将其安装到python系统。

python setup.py install

这个命令会讲我们创建的egg安装到python的dist-packages目录下,我这里的位置在

tree /usr/local/lib/python3.8/dist-packages/demo-0.1-py3.8.egg

查看一下它的结构:


$ unzip -l /usr/local/lib/python3.8/dist-packages/demo-0.1-py3.8.eggArchive:  /usr/local/lib/python3.8/dist-packages/demo-0.1-py3.8.eggLength      Date    Time    Name
---------  ---------- -----   ----176  2021-11-10 11:23   EGG-INFO/PKG-INFO137  2021-11-10 11:23   EGG-INFO/SOURCES.txt1  2021-11-10 11:23   EGG-INFO/dependency_links.txt5  2021-11-10 11:23   EGG-INFO/top_level.txt1  2021-11-10 11:23   EGG-INFO/zip-safe124  2021-11-10 11:12   demo/__init__.py379  2021-11-10 11:23   demo/__pycache__/__init__.cpython-38.pyc
---------                     -------823                     7 files

打开python终端或者ipython都行,直接导入我们的包

>>> import demo
>>> demo.test()
hello world!
>>>

好了,执行成功!

这里强调:egg文件中已经包含所有关于源程序,以及路径的信息。与/usr/local/lib/python3.8/dist-packages/下存放路径和文件完全等价

sudo unzip   /usr/local/lib/python3.8/dist-packages/demo-0.1-py3.8.egg

将看到生成程序文件路径和说明文件路径。再次强调:egg就是执行程序。

Python的setuptools详解【1】相关推荐

  1. Python的setuptools详解【3】打包wheel并提交给pypi

    一.说明 上文说,如何用setup.py打包成egg包,继而又有find_package()函数用法,本篇专门介绍,如何用setuptools打包成不同的软件包. 首先需要保证你有最新版的setupt ...

  2. Python的setuptools详解【2】find_packages()

    一.提要 python中安装包的方式有很多种: 源码包:python setup.py install 在线安装:pip install 包名 easy_install 包名 如何创建以上的包,我们在 ...

  3. python20191031_20191031:Python取反运算详解

    20191031:Python取反运算详解 取反运算:~3 == 4 1.对于数字 3 =======>转换为二进制表示为011 2.对011取反为100 3.为什么表示-4 a.计算机用补码表 ...

  4. Python字符编码详解

    Python字符编码详解 转自http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html Python字符编码详解 本文简单介绍了各种常用的 ...

  5. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

  6. windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  7. python变量类型-Python 变量类型详解

    变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整 ...

  8. python安装教程windows-windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  9. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

最新文章

  1. 如何实现可以带详细表格的DropDownList
  2. 只用1/500数据就打败人类!一种采样高效的强化学习算法 | 报告详解
  3. 分布式唯一id:snowflake算法思考
  4. Python web 项目的依赖管理工具
  5. namesapce的作用 增加访问路径 目的:区分不同包的相同action的访问路径
  6. 实现WIFI客户端上网设置说明
  7. 人造卫星为什么会绕着地球转而不是停在太空中或者越飞越远.掉进地球的卫星为什么烧不完....
  8. ArrayList用法说明
  9. 大数据数据科学家常用面试题_进行数据科学工作面试
  10. 浅尝EffectiveCSharp_1
  11. linux 开启关闭tomcat服务器端口,linux系统安装、启动和关闭tomcat
  12. python创建一个json_如何为Python选择一个更快的JSON库
  13. OJ1028: I love 闰年!
  14. 视频换脸AISWAP技术示例
  15. (转)bash条件判断之if语句
  16. typecho支持html,为Typecho文章增加HTML标签支持
  17. mapbox 将坐标转换成米
  18. ceph客户端使用_Ceph 基础篇 认证
  19. 团队管理35-管理方法论积累
  20. 【材料计算】输入文件INCAR

热门文章

  1. MATLAB应用实战系列NSGA-II多目标优化算法原理及应用实例(附MATLAB代码)
  2. MATLAB从入门到精通系列之几个实用小技巧
  3. 用Tableau画幂函数柱状图
  4. 机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法
  5. R语言与Tableau集成之可视化应用
  6. Python安装、配置图文详解
  7. react 调用组件方法_React源码分析1 — 组件和对象的创建(createClass,createElement)...
  8. Python入门100题 | 第019题
  9. 【机器学习算法-python实现】svm支持向量机(1)—理论知识介绍
  10. Spring 中JCA CCI分析--转载