心得:事情太多,总得去专心做一件事情,才能把它做好
一、Python文件类型介绍
python作为一门解释型脚本语言,它有三种发布方式:
- .py文件 : 源码文件,运行需要使用者安装Python环境并且安装依赖的各种库
- .pyc文件:pyc文件是Python解释器可以识别的二进制码,可跨平台的,需要使用者安装相应版本的Python和依赖库。
- 可执行文件:不需要安装python环境和依赖库,可针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,…)
二.PyInstaller的原理简介
-
PyInstaller工具可以把python解析器和脚本打包成一个可执行的文件,并不是编译成真正的机器码,打包成一个可执行文件后运行效率可能会降低,好处就是在使用者的机器上可以不用安装python和你的脚本依赖的库。
-
利用PyInstaller对指定的的脚本打包时,会先分析脚本所依赖的其他脚本,然后根据导包路径去查找,把所有相关的脚本收集起来,包括Python解析器,然后根据你的命令参数可分别生成文件夹,或者打包成一个可执行文件。
-
无论是生成的文件夹里的可执行文件或者只打包成一个可执行文件都可以直接运行,前者需要把整个文件夹都给别人。
-
注意⚠️:PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。
三、安装使用
1.安装
-
PyInstaller在mac,linux下的安装
pip install PyInstaller使用命令为
pyinstaller -F hello.py
pyinstaller命令不存在时,需要建立软连接
ln -s /usr/local/python3.7/sitpackge/pyinstaller /usr/local/bin/pyinstaller
生成的可执行文件在dist路径下
-
在windows下安装
pip install pyinstaller
pip install pypiwin32
2.使用
常用语法:PyInstaller -F -w -i xxx.ico dev.py
-F 指只生成一个exe文件,不生成其他dll文件
-w 不弹出交互窗口,如果你想程序运行的时候,与程序进行交互,则不加该参数
-i 设定程序图标 ,其后面的xxx.ico文件就是程序小图标
3.避坑点
- 使用参数-i时,图标的文件格式必须是xxx.ico文件,所以需要把自己的图片转换为ico格式
转换方法:网页直接找转换工具:http://www.bitbug.net/或着使用python的第三方库
pillow 来生成ico文件:
from PIL import Image
obj=Image.open("little_pig.jpg")
obj.thumbnail((127,127),Image.BILINEAR) #可调整大小 #极小的东西
obj.save("little_pig.ico")
print(obj.size)
- 配合pyQT5打包后程序中存在subprocess等程序时,需要将其参数补齐,否则程序不会生效,示例如下:
未生效代码:
import subprocess
res = subprocess.getoutput("ls -l")
改后代码
import subprocess
res = subprocess.Popen("ls -l", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
res.stdout.read().decode(encoding="utf-8")
res.stdout.close()
- 路径最好为英文,没有中文字符
- 脚本名称里没有特殊字符,使用utf-8编码
- 如果在py文件中用到了多进程,且你在Windows下编译需要加一行代码在开头,multiprocessing.freeze_support()