一、安装 pyinstaller
pip install pyinstaller
二、使用 pyinstaller 命令
使用示例
- 相对路径
在程序目录中,运行命令pyinstaller myscript.py
则可以在当前目录生成两个文件夹dist和build,exe文件在dist文件夹中。 - 绝对路径
在程序目录中,运行命令pyinstaller C:\myscript.py
则会在当前执行命令的目录生成dist和build文件夹
常用命令参数
参数名 | 描述 | 说明 |
---|---|---|
-D | 生成one-folder的程序(默认) | 生成结果是一个目录,各种第三方依赖、资源和exe同时存储在该目录 |
-F | 生成one-file的程序 | 生成结果是一个exe文件,所有的第三方依赖、资源和代码均被打包进该exe内 |
–add-data | 打包额外资源 | 用法:pyinstaller main.py --add-data=src;dest。windows以;分割,linux以:分割 |
–add-binary | 打包额外的代码 | 用法:同–add-data。与–add-data不同的是,用binary添加的文件,pyi会分析它引用的文件并把它们一同添加进来 |
-p | 指定额外的import路径,类似于使用PYTHONPATH | 参见PYTHONPATH |
–hidden-import | 打包额外py库 | pyi在分析过程中,有些import没有正确分析出来,运行时会报import error,这时可以使用该参数 |
-c | 显示命令行窗口 | 与-w相反,默认含有此参数 |
-w | 不显示命令行窗口 | 编写GUI程序时使用此参数有用。 |
-i | 为main.exe指定图标 | pyinstaller -i beauty.ico main.py |
- 例子:
- 打包单独exe文件
pyinstaller -F T1.py
- 打包带有文件夹依赖文件
pyinstaller -D T1.py
- -i 改变生成程序的icon图标
pyinstaller -F -i ./my.ico T1.py
- -n NAME,–name=NAME 设置产生文件的名字(mypy)
pyinstaller -F -n mypy -i ./my.ico T1.py
- 多文件打包时
- 存在包,主文件时:
pyinstaller -F main.py -p ./tools
- 没有包,但是py时:
pyinstaller -F main.py -p getexcel.py
- 存在包,主文件时:
- 打包单独exe文件
补充
- -c, –console, –nowindowed 使用控制台,无界面(默认)
- -w, –windowed, –noconsole 使用窗口,无控制台
常见问题
- 路径问题:使用pyinstaller打包时,如使用
rootPath = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
则会把exe打包过程中的路径打包进去,可以使用os.path.dirname(os.path.realpath(sys.argv[0]))
获取当前运行py,当前路径
踩过的坑
打包的文件中导入的模块或者包里,不要用检查有没有python保留字,否则打包的exe文件运行报错
pyinstaller打包exe后无法执行错误解决
打包文件时为了好看,自定义了ico图标,且按照命令正确执行了,但是还是显示默认图标,其实时操作系统explorer缓存问题,通过切换大图标、小图标,或者复制到别的目录就能看到自定义的图标了
python3 pyinstaller打包生成exe程序 图标不改变