安装pyinstaller
首先需要安装打包需要用到的库——pyinstaller,方法很简单直接使用pip安装即可。
pip install pyinstaller
项目打包
-
把所有静态资源转移到和想要打包的模块处于同一个目录下。我要将main.py转为可执行程序,我将所有的静态资源文件都放到和main.py同一个目录下,如下图中的align、music文件夹中的文件都是项目所需的静态资源。
-
查看代码中所有引用静态资源(文本、图片、音频等)的路径,将路径改为绝对路径。使用Python的os库即可完成对路径的拼接。示例代码和项目结构如下:
//os.path.realpath(_file):可以获取当前文件的绝对路径:C:\Users\13906\Desktop\faceRecognition\main\_main.py mir_path, _ = os.path.split(os.path.realpath(__file__)) \\C:\Users\13906\Desktop\faceRecognition\main,_main.py # 将静态资源路径拼接成绝对路径。注意:不要写成"\\music\\success.mp3" success_music_path = os.path.join(mir_path, "music\\success.mp3") \\C:\Users\13906\Desktop\faceRecognition\main\music\success.mp3 fail_music_path = os.path.join(mir_path, "music\\fail.mp3") \\C:\Users\13906\Desktop\faceRecognition\main\music\fail.mp3 check_face_music_path = os.path.join(mir_path, "music\\check_face.mp3") \\C:\Users\13906\Desktop\faceRecognition\main\music\check_face.mp3
以上是我在项目中main模块对静态资源的操作。其他的类似。 -
执行转换命令。
pyinstaller -F --hidden-import="sklearn.utils._cython_blas" --hidden-import="sklearn.neighbors.typedefs" --hidden-import="sklearn.neighbors.quad_tree" --hidden-import="sklearn.tree._utils" main\main.py
上述命令的选项的含义:
-F:把整个软件(包括依赖的各种库文件)打包成单一文件;
–hidden-import:隐藏导入的这些库(这个选项是针对我这个项目的,这是一个人脸识别的项目,sklearn是一个机器学习的库,对于其他项目这个选项未必使用)
-w:禁止Windows的命令行窗口。不然双击exe时会打开一个黑乎乎的dos窗口(这个选项适合在项目调试完毕后再执行,否则看不到项目中打印的信息);
执行完上述命令后,会在项目目录下生成build、dist两个文件夹和一个.spec文件。https://blog.csdn.net/qq_38882497/article/details/105252104
https://stackoverflow.com/questions/57108026/pyinstaller-modulenotfounderror-no-module-named-sklearn-utils-cython-blas -
解读生成的文件、文件夹。.spec文件,我觉得这是一个配置文件,里面可以设置一些在将.py文件转为.exe文件时的要求。例如,需要隐藏导入的库时也可以在这里设置。此外,比较常用的时,有了这个文件在下次再想将项目中的.py模块转为.exe文件时,可以直接使用pyinstaller运行这个文件。
pyinstaller main.spec
dist文件夹:生成的.exe和项目所有用到的第三方库的就在这个文件夹里面。
build文件夹:并没有使用到,如果大家用到了可以补充。 -
运行生成的exe文件即可。有时直接运行生成exe文件,如果含有报错信息,黑框会闪一下,然后就消失了,此时可以通过cmd进入该exe所在的目录,然后再执行该exe文件,使用.\exe文件来运行文件,如下图所有,如果有错误信息,会直接打印在黑框中,不会一闪而过。
-
完毕,写的不对的地方,欢迎大家指正。