一 基本概念

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
  1. 方法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

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

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

再次强调:egg就是执行程序。
值得注意的是: 上方提到安装python包到系统时使用的是python setup.py install, 当然还有其他方式如python setup.py develop,两者主要区别是python setup.py install:主要是安装典型第三方包,这种包比较稳定,不再需要你去编辑、修改或是调试。而python setup.py develop适合当你安装一个包后,这个包需要你不断修改,使用这种安装方式这样你就不用每次修改后都重新安装。原理如下:

四、setuptools 中重要参数 find_packages()

如何创建以上的包,我们在上文展示如何通过"Python蛋",将自己的一个程序安装到python环境中。下面指出,如何使用find_packages()将更多个资源打包成python蛋,并解释如何调用。

实验3:find_packages()使用

1. 准备工作
当前测试的目录是 /tmp/demo;创建目录-文件结构:

`-- demo|-- helloapp|   |-- hello.py|   `-- __init__.py|-- __init__.py|-- myapp|   |-- __init__.py|   `-- myapp.py`-- setup.py

2.编辑 setup.py

from setuptools import setup, find_packages
setup(name="demo",version="1.0",author="zbj",author_email="22@qq.com",packages=find_packages( exclude=["*.tests", "*.tests.*", "tests"] ) #排除tests等
)

3.编辑 hello.py

def hello_func():print("HelloWorld")

4.编辑 myapp.py

def myapp_func():print("嘿嘿嘿")

这里专门解释find_packages()是啥东西?
就是在当前目录,以及当前目录下,所有的python包(带__init__.py的目录)都搜索,并一起打成egg文件包。

find_packages(xyz),就是搜索名称为xyz的包,以及xyz的下层目录的包搜索出来,并一起打成egg文件包。

5. 源码安装
进入setup.py所在的那层目录
cd /tmp/demo
检查setup.py 是否有错误(warning不是错误)

python setup.py check

安装

python setup.py install

python setuptools工具使用解析相关推荐

  1. python自带网页解析器_Python爬虫Chrome网页解析工具-XPath Helper

    之前就说过Python爬虫中Xpath的用法,相信每一个写爬虫.或者是做网页分析的人,都会因为在定位.获取XPath路径上花费大量的时间,在没有这些辅助工具的日子里,我们只能通过搜索HTML源代码,定 ...

  2. Python virtualenv工具设置虚拟环境和VS code调试Python

    Python virtualenv工具设置虚拟环境和VS code调试Python 1. Window环境下采用VS code调试Python和虚拟环境 1.1 安装Python 1.2 安装虚拟环境 ...

  3. python下载软件-python下载工具

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! you-get是一个基于 python 3 的下载工具. 使用 you-get ...

  4. Python 开发工具链全解

    可能刚开始学习Python时,有人跟你说可以将源文件所在的文件夹添加到 PYTHONPATH环境变量中,然后可以从其他位置导入此代码.在大多数情况下,这个人常常忘记补充这是一个非常糟糕的主意.有些人在 ...

  5. python开发工具下所有软件都打不开_Python 开发工具链全解

    可能刚开始学习Python时,有人跟你说可以将源文件所在的文件夹添加到 PYTHONPATH环境变量中,然后可以从其他位置导入此代码.在大多数情况下,这个人常常忘记补充这是一个非常糟糕的主意.有些人在 ...

  6. python离线安装pip.whl_20180903 - Python Pip 工具下载whl包与离线安装

    20180903 - Python Pip 工具下载whl包与离线安装 1. 我的Blog 2. 简介信息 摘要:Linux下,python,pip工具离线安装包 Author: andy_yhm@y ...

  7. python解题软件哪个好用_几个好用的Python数据分析工具

    原标题:几个好用的Python数据分析工具 ​常用的Python数据分析工具汇总! Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用 ...

  8. Python 开发工具集:关于文档、测试、调试、程序的优化和分析

    Python 开发工具集:关于文档.测试.调试.程序的优化和分析 原文    http://segmentfault.com/a/1190000000410521 Python已经演化出了一个广泛的生 ...

  9. python开发软件的实例-Python 开发工具和框架安装实例步骤

    引言: 其实之前对于 Python,只是知道有这门语言而已.大部分还是使用 .net 开发的,之前也学了 MVC+EF 开发,但是由于工作上完全用不到,也就没有在博客记录学习的东西了. 最近又接触到了 ...

最新文章

  1. Go 学习笔记(7)— 常量定义、常量使用、枚举用法、iota 常量、不设置初始值常量
  2. 在.NET2.0中如何更简单的使用委托将方法加载到事件中去
  3. java过滤4字节_乐字节Java8核心特性实战之四:方法引用
  4. java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解
  5. java 数字表示什么意思是什么,读取Java字节码指令:数字是什么意思?
  6. 操作系统中的处理机调度调度_操作系统中的流程分类和调度
  7. Qt之Concurrent框架
  8. WINDOWS SERVER 2008/2008 R2/2012 最大内存支持
  9. 一位网友在某职业论坛上就发了一个相关的帖子
  10. 聊聊 Java 中 HashMap 初始化的另一种方式
  11. [原创] 数据库小工具 (BatchESQL.exe)
  12. 恩格列净治疗心衰获得FDA快速通道资格
  13. 2022年6月 青少年软件编程(图形化) 等级考试试卷(四级)
  14. 支付系列-对接支付宝支付
  15. 关键词热度分析工具_不懂亚马逊关键词分析怎么办?10款超好用的亚马逊运营必备关键词研究分析工具,建议收藏!...
  16. Powerdesigner pdm视图看不到表注释comment问题
  17. 人脸识别最低像素_人脸识别新利器:让你在50米内无处遁逃
  18. uniapp中登录注册页面以视频为背景
  19. Codeforces 并查集题集(Disjoint Sets Union Step1)
  20. 电脑连接linux系统怎么样,如今连Linux都弄不懂-当时我如果那么学习培训电脑操作系统就好啦...

热门文章

  1. vs中c语言图形显示出来,VS2010+Opencv+MFC读取图像和视频显示在Picture控件
  2. 随身wifi刷全网通基带和获取root权限安装面具模块折腾教程
  3. 使用计算机粘贴板的步骤,剪贴板怎么打开,手把手教你电脑剪贴板怎么打开
  4. 数字电子技术课程设计——盲人报时钟
  5. 【rzxt】笔者支招:AMD双核电脑安装补丁后的问题
  6. 自旋锁和互斥锁的区别 java中lock Syntronized区别
  7. 二手MicroServer Gen8折腾记 - 配置 RouterOS 软路由
  8. Hexo 博客优化之博客美化系列(持续更新)
  9. 工程师什么时机最合适选择跳槽?
  10. TechSmith Camtasia 2019 特别版 Mac 最强大的屏幕录像工具