python app-Python zipapp打包教程(超级详细)
经过复杂的开发、调试之后,终于得到一个 Python 程序,这个程序或许精巧,或许有些古拙,但它是我们心血的结晶,我们当然希望将这个程序发布出来。
Python 提供了一个 zipapp 模块,通过该模块可以将一个 Python 模块(可能包含很多个源程序)打包成一个 Python 应用,甚至发布成一个 Windows 的可执行程序。
生成可执行的Python档案包
zipapp 是一个可以直接运行的模块,该模块用于将单个 Python 文件或整个目录下的所有文件打包成可执行的档案包。
zipapp 模块的命令行语法如下:
python -m zipapp source [options]
在上面命令中,source 参数代表要打包的 Python 源程序或目录,该参数既可以是单个的 Python 文件,也可以是文件夹。如果 source 参数是文件夹,那么 zipapp 模块会打包该文件夹中的所有 Python 文件。
该命令的 options 支持如下选项:
-o ,--output=:应选项指定输出档案包的文件名。如果不指定该选项,所生成的档案包的文件名默认为 source 参数值,并加上 .pyz 后缀。
-p ,--python=:改选项用于指定 Python 解释器。
-m ,--main=:该选项用于指定 Python 程序的入口函数。该选项应该为 pkg.mod:fn 形式,其中 pkg.mod 是一个档案包中的包或模块,fn 是指定模块中的函数。如果不指定该选项,则默认从模块中的 __main__.py 文件开始执行。
-c,--compress:从 Python 3.7 开始支持该选项。该选项用于指定是否对档案包进行压缩来减小文件的大小,默认是不压缩。
--info:该选项用于在诊断时显示档案包中的解释器。
-h,--help:该选项用于显示 zipapp 模块的帮助信息。
下面在某目录下建立一个 app 子目录,该子目录用于包含多个 Python 程序。首先在该目录下开发一个 say_hello.py 程序:
def say_hello(name):
return name + ",您好!"
然后在该目录下开发一个 app.py 程序来使用 say_hello 模块:
from say_hello import *
def main():
print("程序开始执行")
print(say_hello("孙悟空"))
在命令行工具中进入该目录(app 目录的父目录),然后执行如下命令:
python -m zipapp app -o first.pyz -m "app:main"
上面命令指定将当前目录下的 app 子目录下的所有 Python 源文件打包成一个档案包,并通过 -o 选项指定所生成的档案包的文件名为 first.pyz;-m 选项指定使用 app.py 模块中的 main 函数作为程序入口。
运行上面命令,将会生成一个 first.pyz 文件。接下来可以使用 python 命令来运行 first.pyz 文件:
python first.pyz
程序开始执行
孙悟空,您好!
通过命令行工具在 app 目录的父目录下执行如下命令:
python -m zipapp app -m "app:main"
上面命令没有指定 -o 选项,这意味着该命令将会使用默认的输出文件名:source 参数值加 .pyz 后缀。运行上面命令,将会在当前目录下生成一个 app.pyz 文件。
zipapp创建独立应用
通过上面介绍的方式打包得到的档案包中只有当前项目的 Python 文件,如果 Python 应用还需要使用第三方模块和包(比如前面介绍的需要连接 MySQL 的应用),那么仅打包该应用的 Python 程序是不够的。
为了创建能独立启动的应用(自带依赖模块和包),需要执行两步操作:
将应用依赖的模块和包下载到应用目录中。
使用 zipapp 将应用和依赖模块一起打包成档案包。
下面在 app 所在目录下再创建一个 dbapp 子目录,该子目录将会作为本应用的目录。接下来在 dbapp 目录下新建一个 __main__.py 文件作为程序入口,这样程序在打包档案包时就不需要指定程序入口了。
下面是 __main__.py 文件的代码:
from exec_select import *
# 执行query_db()函数
query_db()
其中,exec_select.py 文件需要自己添加,包含代码如下:
# 导入访问MySQL的模块
import mysql.connector
def query_db():
# ①、连接数据库
conn = conn = mysql.connector.connect(user="root", password="32147",
host="localhost", port="3306",
database="python", use_unicode=True)
# ②、获取游标
c = conn.cursor()
# ③、调用执行select语句查询数据
c.execute("select * from user_tb where user_id > %s", (2,))
# 通过游标的description属性获取列信息
for col in (c.description):
print(col[0], end=" ")
print(" --------------------------------")
# 直接使用for循环来遍历游标中的结果集
for row in c:
print(row)
print(row[1] + "-->" + row[2])
# ④、关闭游标
c.close()
# ⑤、关闭连接
conn.close()
最后按照如下步骤将 dbapp 子目录下的应用打包成独立应用:
通过命令行工具在dbapp当前所在目录执行如下命令:
python -m pip install -r requirements.txt --target dbapp
上面命令实际上就是使用 pip 模块来安装模块,其中 python -m pip install 表示要安装模块。--target 选项指定将模块安装到指定目录下,此处指定将依赖模块安装到 dbapp 子目录下。-r 选项指定要安装哪些模块,此处使用 requirements.txt 文件列出要安装的模块和包。-r 选项支持两个值:
直接指定要安装的模块或包。
使用清单文件指定要安装的模块和包。
当应用依赖的模块较多时,建议使用清单文件来列出所依赖的模块。
如果直接运行上面命令,pip 模块会提示找不到 requirements.txt 文件,因此需要在当前目录下添加一个 requirements.txt 文件,并在该文件中增加如下一行。
mysql-connector-python
如果项目需要依赖多个模块,则可以在 requirements.txt 文件中定义多行,每行定义一个模块。
重新运行上面命令,将可以看到 pip 开始下载 mysql-connector-python 模块,下载完成后将可以在 dbapp 子目录下看到大量有关 mysql-connector-python 模块的文件。
如果 pip 在 dbapp 子目录下生成了 .dist-info 目录,则建议删除该目录。
使用 zipapp 模块执行打包操作。由于本例的 dbapp 子目录下包含了 __main__.py 文件,该文件将会作为程序入口,因此打包时不需要指定 -m 选项。使用如下命令来打包:
python -m zipapp dbapp
与上一节所使用的命令相比,该命令没有使用 -m 边项来指定程序入口,该程序将会使用档案包中的 __main__.py 文件作为程序入口。运行上面命令,将会得到一个大约为 18MB 的档案包。因为该档案包自包含了 mysql-connector-python 模块,所以比较大。
在创建了独立应用之后,只要目标机器上安装了合适版本的 Python 解释器,即可运行该独立应用。我们可以先使用如下命令卸载在 Python 目录下安装的 mysql-connector-python 模块:
pip uninstall mysql-connector-python
此时在本机的 Python 目录下不再包含 mysql-connector-python 模块,但 dbapp.pyz 程序依然可以正常运行,因为它自包含了 mysql-connector-python 模块。
python app-Python zipapp打包教程(超级详细)相关推荐
- python详细下载安装教程-Python下载并安装图形教程[超级详细]
现在python语言非常热门,许多小伙伴正在学习python,但是许多小伙伴在安装python时遇到问题. 下面我们要详细介绍下载和安装python的方法. 1. 打开python下载链接,然后单击所 ...
- 在电脑上安装python的步骤-python中pygame安装过程(超级详细)
安装时是需要设置python环境变量的,下载python的时候底下有个小框框(没有默认选中) Add Python 3.7 to PATH需要选择的,如果没有选择的话,需要自己设置,我一般比较懒,卸载 ...
- 本机php环境搭建教程:windows环境下wampserver的配置教程——超级详细
转载自:http://youchunyan5.blog.163.com/blog/static/5896062020123474456352/ 本机php环境搭建教程:windows环境下wampse ...
- python app教程-Python zipapp打包教程(超级详细)
经过复杂的开发.调试之后,终于得到一个 Python 程序,这个程序或许精巧,或许有些古拙,但它是我们心血的结晶,我们当然希望将这个程序发布出来. Python 提供了一个 zipapp 模块,通过该 ...
- python程序打包成安卓app教程_Python zipapp打包教程(超级详细)
经过复杂的开发.调试之后,终于得到一个 Python 程序,这个程序或许精巧,或许有些古拙,但它是我们心血的结晶,我们当然希望将这个程序发布出来. Python 提供了一个 zipapp 模块,通过该 ...
- python zipapp_Python zipapp打包教程(超级详细)
经过复杂的开发.调试之后,终于得到一个 Python 程序,这个程序或许精巧,或许有些古拙,但它是我们心血的结晶,我们当然希望将这个程序发布出来. Python 提供了一个 zipapp 模块,通过该 ...
- Python开发大师总结出了超级详细的Python爬虫学习清单,免费教程
0. Python 基础 先放上Python 3 的官方文档:https://docs.python.org/3/ (看文档是个好习惯) 关于Python 3 基础语法方面的东西,网上有很多,大家可以 ...
- 如何使用python编程画图_建议收藏-超级详细的python画图教程
同切圆 视频中会详细介绍画图各种命令的用法,如果你学过scratch等图形化编程,想过渡到python编程,建议从这个视频入手.当然如果你打算从零开始学习python编程,也可以从这个视频入手,它的语 ...
- python下载-Python下载和安装图文教程[超详细]
如今python语言非常火,很多小伙伴都开学习python,但是很多小伙伴在安装python的时候遇到问题,下面我们就想详细介绍介绍python下载和安装的方法. 1. 打开python下载链接htt ...
最新文章
- 要如何努力,才干成为非常厉害的人?!
- python处理excel文件-python读取excel文件
- producer send源码_Kafka源码深度剖析系列(七)——Producer核心流程初探
- Linux下的xml文件的创建
- 微信小程序可以实现很多功能
- 使用Linux的tzselect功能,查看各个洲都有哪些国家(地区)
- Centos打开、关闭、结束tomcat,及查看tomcat运行日志
- 04-1下载Win系统(装机助理)
- 双目测量空间中两点距离
- 应用之星:H5制作教程-最好用的H5制作工具
- 【Touch】触摸事件onTouch
- ZigBee--IAR新建、配置LED工程
- Python-3:循环-练习
- 恒星结构和演化-学习记录6-第五章-恒星核合成
- mysql04:数据管理
- 公司固定资产该哪个部门管理,一般公司固定资产怎么管理
- electron vue点击按钮关闭_electron+vue制做桌面应用--自定义标题栏最大/小化和关闭...
- 深度学习样本规则裁剪(图片规则裁剪)
- Go 读者提问:GPM 模型的 M 实际数量受什么影响?
- 使用 JS 脚本实现网页全自动秒杀抢购功能