打包了之后发现报错,被查杀病毒了,先把Windows Defer 关了。
打包语句:
1 | pyinstaller --onefile --windowed --add-data "assets;assets" main.py |
但是没图标
1 | pyinstaller --onefile --windowed --icon="assets/icon.ico" --add-data "assets;assets" main.py |
还是不行,并且里面的小鱼图片依然没有
pyinstaller 打包成mac只能给mac用,打包成windows只能给windows用。
https://www.bilibili.com/video/BV15i4y1U7F7/?p=2
产出多文件的打包
这个视频里建议使用python3.6.8,打包exe,版本太高了会出问题。
配合虚拟环境进行打包
看视频里记录一些东西:
1 | pyinstaller -D main.py |
build是打包过程中,中间过程产出代码,没用的。
dist才是最终成品
-D会套一层文件夹,文件夹里有exe和一个_internal
。exe只有5MB。并且这个exe是必须依赖于_internal
文件夹的。不能分开把exe放在别的位置
产出单文件的打包
-D改成-F就可以了
但这个还是无法解决Qt里使用了图片的问题。
产出单文件的时候要注意路径问题。要给项目一个全局变量叫 BASE_DIR 通过os拿到
1 | import os |
例如可以新建一个static文件夹,里面的 __init__.py
里面放这个
但这个视频里的方法也依然无法解决PyQt5图片不显示的问题。
这个倒是解决了问题
https://blog.csdn.net/weixin_43444734/article/details/126542399
1 | pyrcc5 image.rcc -o assets.py |
还需要解决如何不让pyinstaller以系统解释器的第三方库环境打包,以项目虚拟环境的第三方库依赖环境打包
其实就是在虚拟环境里安装一个pyinstaller,然后进入虚拟环境再使用pyinstaller。
最终结果就是 50MB —-> 40MB 也就仅仅少了10MB
最终的打包指令
1 | pyinstaller --onefile --windowed --icon=./assets/icon.ico main.py -n cyber-life |
会发现最终的成品是 main.exe
这里有一个现象
如果是main.exe 在win11上,默认看起来还是原来的图标,但是在文件浏览器里缩放大小的时候可能会突然变成自定义的图标。
但一旦改一个名字,就变成自己的图标了,无论如何缩放大小都不会出现原来的图标的情况。