Python打包exe可执行程序及常见问题

1. 打包exe文件

1)安装pyinstaller

打包成exe文件需要使用pyinstaller模块,可通过pip安装
pip install pyinstaller

2)打包

常用参数(重点为加粗的参数):
-F  制作独立的可执行程序(即生成单一的可执行文件,而不是多个)
-p        添加搜索路径,以便找到依赖文件(import引入的文件,注意不是模块,默认会在当前                   目录查找)
-w    制作窗口程序(制作带界面的程序时,不加该参数,运行时会弹出黑框)
-c  制作命令行程序(默认)
--icon=[ico文件路径]         指定程序图标(也可以使用-i 图片名.ico)
-v [指定文件]                      指定程序版本信息
-n [指定程序名]                  指定程序名称(不指定则为源文件的名称)
-D  制作出的档案存放在同一个文件夹下(默认值)
-K  包含TCL/TK(对于使用了TK的,最好加上这个选项,否则在未安装TK的电脑上无法运行)
-X  制作使用UPX压缩过的可执行程序(推荐使用这个选项,需要下载UPX包,解压后upx.exe             放在Python(非PyInstaller)安装目录下,下载upx308w.zip)
-o DIR  指定输出SPEC文件路径(这也决定了最后输出的exe文件路径)
ps:
打包完成后会生成两个目录,dist和build,生成的exe文件位于dist目录,build目录没用可删除
制作ico图标的链接 在线生成透明ICO图标——ICO图标制作 ,下载ico图标的链接: https://www.easyicon.net/

3)示例

①制作不带图标的,非窗口程序
pyinstaller -F test.py
②制作带图标的,非窗口程序
pyinstaller -F -i favicon.ico ControlAccess.py
③制作带图标的窗口程序
pyinstaller -F -w -i favicon.ico ControlAccess.p
注意:生成的带图标的exe文件,需要离开当前目录才会显示图标

2. 常见问题

1) 提示缺少numpy.random.common
用pyinstaller打包时出错:
failed to execute script 文件名
错误提示:
no module named 'numpy.random.common'
解决方法:
该问题是由于numpy版本导致,降低版本后问题解决:
pip uninstall numpy
pip install numpy==1.16.2        //安装指定版本numpy模块
2) unknown encoding: idna
解决方法,在代码开头导入:
import encodings.idna注:只在被打包的py文件中导入idna即可,其引用的其他文件无需关心
3) 正常打包,但exe程序执行时报FileNotFoundError
报错如下,以 _cffi_backend为例:
FileNotFoundError:[Errno 2] No such file or dirctory:'xx:\\anaconda3\\lib\\site-packages\\_cffi_backend.pyd'
原因是打包的时候这个包没有被隐式打包进去
解决方法:打包时添加如下--hidden-import参数,值为缺少的包的名称。
pyinstaller -F --hidden-import=_cffi_backend  test.py
4) 多进程代码重复启动
将包含多进程的代码打包为exe时,程序重复执行,直至内存耗尽。这是fork()在windows上的缺点。解决办法是在main()最前面执行freeze_support()
from multiprocessing import freeze_support

if __name__ == "__main__":
    freeze_support()
    # 之后再执行多进程

你可能感兴趣的:(Python,python,开发语言)