目录
简介
我的使用场景是打包PyQt做好的上位机界面,我的文件结构如下:
其中,fun文件夹里面全是一些.py文件,封装一些类和方法;images文件夹里面是我的程序用到的图片;personnal_data文件夹里面包括两个子文件夹,两个子文件夹里面存入不同类型的数据,如.csv、.npy等。
注意本文提到的文件夹是文件夹,文件是文件,需着重区分。
步骤
打包具体步骤如下:
一、生成.spec文件
在pycharm终端,cd到pro1文件夹下,运行
pyi-makespec -w main.py
其中,main.py就是加载主程序的那个py文件,需要替换成你的。
即
这样就生成了一个main.spec文件,大概长这样
二、在.spec文件里手动添加其余文件信息
仔细看.spec文件,主要是修改这两个位置
规则:把散落在外的.py文件添加到'main.py下面';把文件夹及其余散落在外的文件添加到binaries后面,注意格式为('文件夹名','文件夹名')或('文件名','.')。写 '文件夹名' 还是写 '.' 后面会有解释。
添加好后,接着在终端(还是cd pro1以后那里)运行
pyinstaller main.spec
运行之后会生成build文件夹和dist文件夹。build是exe编译过程中产生的文件夹,没用;我们最终的文件在dist文件夹下。如图
运行main.exe即可。
一些可能的疑惑和注意事项
1、images.qrc和mainwindow.ui是pyqt5用于将图片和界面编译成.py文件,只是为了方便设计,编译后真正用到的是images_rc.py和mainwindow.py,所以这两个不需要放在binaries里面。
2、手动添加信息后再打包,其实就相当于在_internal文件夹下导入了上述binaries添加的那些东西(还有一个Config.ini文件,截图放不下了)
3、关于('文件夹名','文件夹名')和('文件名','.')
如果后面用了'文件夹名',则会导出完整的文件夹,如上图所示。如果后面用了'.',则会导出文件夹里面的内容,不包括文件夹本身。如果('personal_data','.'),personal_data下有left和right两个子文件夹,则在_internal里只会有left和right及里面的文件,而没有personal_data;如果('Config.ini','Config.ini'),则在_internal里会生成一个Config.ini文件夹,里面包括Config.ini文件。
4、路径问题
这一点很重要,如果说你之前的路径是这样的
那么务必要通过os模块更改为绝对路径(可自己打印路径调试),如下图
总之务必确保你自己导入的模块路径打包后能够被找到。
可以在命令提示窗口(小黑窗),把main.exe拖入,回车运行,可以类似编译器打印出错误。