python setuptools工具使用解析
一 基本概念
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:最简单安装,假定在ubuntu下
sudo apt-get install python-setuptools
- 方法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工具使用解析相关推荐
- python自带网页解析器_Python爬虫Chrome网页解析工具-XPath Helper
之前就说过Python爬虫中Xpath的用法,相信每一个写爬虫.或者是做网页分析的人,都会因为在定位.获取XPath路径上花费大量的时间,在没有这些辅助工具的日子里,我们只能通过搜索HTML源代码,定 ...
- Python virtualenv工具设置虚拟环境和VS code调试Python
Python virtualenv工具设置虚拟环境和VS code调试Python 1. Window环境下采用VS code调试Python和虚拟环境 1.1 安装Python 1.2 安装虚拟环境 ...
- python下载软件-python下载工具
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! you-get是一个基于 python 3 的下载工具. 使用 you-get ...
- Python 开发工具链全解
可能刚开始学习Python时,有人跟你说可以将源文件所在的文件夹添加到 PYTHONPATH环境变量中,然后可以从其他位置导入此代码.在大多数情况下,这个人常常忘记补充这是一个非常糟糕的主意.有些人在 ...
- python开发工具下所有软件都打不开_Python 开发工具链全解
可能刚开始学习Python时,有人跟你说可以将源文件所在的文件夹添加到 PYTHONPATH环境变量中,然后可以从其他位置导入此代码.在大多数情况下,这个人常常忘记补充这是一个非常糟糕的主意.有些人在 ...
- python离线安装pip.whl_20180903 - Python Pip 工具下载whl包与离线安装
20180903 - Python Pip 工具下载whl包与离线安装 1. 我的Blog 2. 简介信息 摘要:Linux下,python,pip工具离线安装包 Author: andy_yhm@y ...
- python解题软件哪个好用_几个好用的Python数据分析工具
原标题:几个好用的Python数据分析工具 常用的Python数据分析工具汇总! Python是数据处理常用工具,可以处理数量级从几K至几T不等的数据,具有较高的开发效率和可维护性,还具有较强的通用 ...
- Python 开发工具集:关于文档、测试、调试、程序的优化和分析
Python 开发工具集:关于文档.测试.调试.程序的优化和分析 原文 http://segmentfault.com/a/1190000000410521 Python已经演化出了一个广泛的生 ...
- python开发软件的实例-Python 开发工具和框架安装实例步骤
引言: 其实之前对于 Python,只是知道有这门语言而已.大部分还是使用 .net 开发的,之前也学了 MVC+EF 开发,但是由于工作上完全用不到,也就没有在博客记录学习的东西了. 最近又接触到了 ...
最新文章
- Go 学习笔记(7)— 常量定义、常量使用、枚举用法、iota 常量、不设置初始值常量
- 在.NET2.0中如何更简单的使用委托将方法加载到事件中去
- java过滤4字节_乐字节Java8核心特性实战之四:方法引用
- java 检查bytebuf长度_Java学习笔记16-Netty缓冲区ByteBuf详解
- java 数字表示什么意思是什么,读取Java字节码指令:数字是什么意思?
- 操作系统中的处理机调度调度_操作系统中的流程分类和调度
- Qt之Concurrent框架
- WINDOWS SERVER 2008/2008 R2/2012 最大内存支持
- 一位网友在某职业论坛上就发了一个相关的帖子
- 聊聊 Java 中 HashMap 初始化的另一种方式
- [原创] 数据库小工具 (BatchESQL.exe)
- 恩格列净治疗心衰获得FDA快速通道资格
- 2022年6月 青少年软件编程(图形化) 等级考试试卷(四级)
- 支付系列-对接支付宝支付
- 关键词热度分析工具_不懂亚马逊关键词分析怎么办?10款超好用的亚马逊运营必备关键词研究分析工具,建议收藏!...
- Powerdesigner pdm视图看不到表注释comment问题
- 人脸识别最低像素_人脸识别新利器:让你在50米内无处遁逃
- uniapp中登录注册页面以视频为背景
- Codeforces 并查集题集(Disjoint Sets Union Step1)
- 电脑连接linux系统怎么样,如今连Linux都弄不懂-当时我如果那么学习培训电脑操作系统就好啦...
热门文章
- vs中c语言图形显示出来,VS2010+Opencv+MFC读取图像和视频显示在Picture控件
- 随身wifi刷全网通基带和获取root权限安装面具模块折腾教程
- 使用计算机粘贴板的步骤,剪贴板怎么打开,手把手教你电脑剪贴板怎么打开
- 数字电子技术课程设计——盲人报时钟
- 【rzxt】笔者支招:AMD双核电脑安装补丁后的问题
- 自旋锁和互斥锁的区别 java中lock Syntronized区别
- 二手MicroServer Gen8折腾记 - 配置 RouterOS 软路由
- Hexo 博客优化之博客美化系列(持续更新)
- 工程师什么时机最合适选择跳槽?
- TechSmith Camtasia 2019 特别版 Mac 最强大的屏幕录像工具