打包了之后发现报错,被查杀病毒了,先把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
2
3
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

例如可以新建一个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上,默认看起来还是原来的图标,但是在文件浏览器里缩放大小的时候可能会突然变成自定义的图标。

但一旦改一个名字,就变成自己的图标了,无论如何缩放大小都不会出现原来的图标的情况。