用 PyInstaller 打包封装python

5 篇文章 0 订阅
3 篇文章 0 订阅

用 PyInstaller 打包封装python

一、必备环境:安装PyInstaller :

pip install pyinstaller

二、输入数据:

test.py 代码,以及 test.png ,test2.png 用于界面显示到图标文件。

三、期望结果:

输出一个test 可以执行程序文件,可直接运行。如: ./test.

实际上,这个文件可运行程序文件是一个包,运行过程中会将这个包解压缩到/tmp/_MEIxxxxxx 路径下,运行结束会自动清理掉。

四、关键步骤:

1、创建配置文件

pyi-makespec  --hidden-import pkgutil -F --add-data test.png:. --add-data test2.png:.  --key=xxxxxxx(16个字符长度密码 ) ./test.py

2、修改配置文件

 如果在创建配置文件的命令中有些参数没有写,可以去直接去配置文件里面修改。基本上不建议修改,因为配置文件里的路径是绝对路径,维护这个文件不太方便。

3、生成可执行程序包

pyinstaller ./test.spec 

 

五、重点问题:

1、pyi-makespec   -F 参数:将可执行程序和依赖库打包成一个文件。

默认PyInstaller会将test.py包成一个 test可执行文件,并将依赖到众多so库一并copy到 “.dist/test/”这个路径下。加上 -F 参数后将在 .dist/test/下面只打包成一个名为test包文件。 

2、 --add-data <SRC;DEST or SRC:DEST> 参数:将程序需要的依赖文件一同打包,运行时也会一同解压到/tmp/_MEIxxxxxx/DEST 路径下。

这个参数可以多次使用,如:

--add-data test.png:.   --add-data test.png:. --add-data test2.png:.

 该参数由一对键值组成,中间用冒号(windows系统环境下用分号)隔开。本例中:test.png是SRC 文件名,“.“ 是DEST路径: 即/tmp/_MEIxxxxxx/./

该参数最终会体现在生成的 test.spec 配置文件中的 datas参数里。

默认: datas=[] ,   使用  --add-data后  datas=[('test.png', '.'), ('test2.png', '.') ],

如果需要增加其它文件,也可直接修改datas的值。

3、运行时图标加载识别问题。

假设在test.py 需要调用到test.png作为界面图标,并且在python源代码中 test.png和test.py是放在同一个目录下的, test.py通过 相对路径方式(如:”./test.png" 或"test.png" )是可以正常访问图标文件的。但是按照2中的配置打包后,运行时 test.png和test可执行程序 这两个文件都会copy到/tmp/_MEIxxxxxx/路径下面,此时test可执行程序却无法加载图标。

要解决这个问题,可以在test.py中将访问路径改为绝对路径。具体方法参考了此贴:https://stackoverflow.com/questions/7674790/bundling-data-files-with-pyinstaller-onefile

可以通过如下代码获得test.png的绝对路径。

import sys
import os

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
    return os.path.join(base_path, relative_path)

在test.py 中可以通过 resource_path("test.png") 这个方式来访问图标文件。

4、加密防止反编译。

主要通过 --key=xxxxxxx(16个字符长度密码 )    这个参数来实现。

需安装加密包:sudo pip install PyCrypto

详细参数使用可以参考官方说明:https://pyinstaller.readthedocs.io/en/stable/man/pyi-makespec.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值