|
为了将开发好的Python工具交付给其他人使用,除了在目标电脑部署Python编译环境以外,我们还可以将它打包成可执行文件,这样目标电脑不需要安装Python环境就可以运行。将Python程序打包成可执行文件的方法有多种,比如Nuitka、PyInstaller等,本文介绍比较常用的打包工具PyInstaller的使用方法。目录0环境说明1PyInstaller安装2PyInstaller常用参数3示例项目4Windows环境打包方法4.1只生成一个exe可执行文件4.2生成多文件4.3设置应用图标5Linux环境打包方法6常见报错6.1Linux环境打包报错0环境说明本文所使用的Windows系统为Windows11,安装的Python版本为3.10.11。Linux系统发行版本为centos7,安装的Python版本为3.10.11。Python环境安装方法可参考Python环境配置以及包管理方法详细介绍。1PyInstaller安装PyInstallergithub仓库地址为:https://github.com/pyinstaller/pyinstaller安装好Python环境后(我使用的Python版本为3.10.11),使用pip命令安装即可:pipinstallpyinstaller12PyInstaller常用参数下面是pyinstaller的常用参数:--name:指定可执行文件名称。--specpath:指定spec文件的生成目录,默认为当前目录。-F,--onefile:将整个应用程序打包到单个可执行文件中。-D,--onedir:生成一个目录,包含多个文件。--add-data、--add-binary:在构建中插入额外的数据或二进制文件,可用于绑定配置文件、示例或其他非代码数据。--exclude-module:排除某些模块。-d,--debug:提供debug输出。-w,--windowed,--noconsole:关闭控制台窗口(仅对Windows有效)。-c,--nowindowed,--console:使用命令行窗口(仅对Windows有效)。-i:设置应用图标。在项目根目录,打开命令行窗口执行命令:pyinstaller项目入口函数即可进行打包,主要生成以下三个内容:*.spec文件build/文件夹:用于构建可执行文件dist/文件夹:包含应用程序的所有依赖项和可执行文件3示例项目本文使用pyinstaller对一个FastAPI示例项目进行打包,github地址为:https://github.com/hiyongz/FastAPI-example4Windows环境打包方法可以先使用pyi-makespec命令生成spec文件,对spec文件进行编辑,然后使用pyinstaller打包。4.1只生成一个exe可执行文件在项目根目录执行如下命令,main.py为python项目入口文件,设置显示控制台:$pyi-makespec-F-cmain.py1执行完成后,会生成名为main.spec的文件。如果项目包括静态文件,需修改main.spec文件,在datas中设置静态文件路径,比如:datas=[('config/config.yaml','config'),('ui/main.ui','ui')]1'运行运行执行pyinstaller命令打包:$pyinstallermain.spec1打包完成后,在根目录下会生成build/和dist/文件夹,dist/文件夹下会生成一个main.exe的文件,将main.py文件复制到dist目录下,双击main.exe文件即可运行应用:INFO:Startedserverprocess[20920]INFO:Waitingforapplicationstartup.INFO:Applicationstartupcomplete.INFO:Uvicornrunningonhttp://0.0.0.0:8001(PressCTRL+Ctoquit)12345浏览器访问http://localhost:8001/docs即可查看接口文档。4.2生成多文件使用-D参数可生成多文件,这种方式打包的文件启动效率更高,按自己需求选择即可。$pyi-makespec-D-cmain.py1也可以直接使用pyi-makespecmain.py命令生成,默认采用的是多文件模式。4.3设置应用图标准备好应用icon文件,执行以下命令:pyi-makespec-F-ilogo_favicon-wechat.ico--name=mainmain.py1注意需要使用--name参数设置一下应用名称,执行完成后会生成名称为main.spec的文件,编辑main.spec文件后,执行pyinstallermain.spec命令打包即可。5Linux环境打包方法Linux环境下pyinstaller打包方法和windows类似,使用如下命令生成单个可执行文件:$pyi-makespec-Fmain.py$pyinstallermain.spec12打包完成后,会在dist目录下生成名为main的可执行文件。[root@Serverdist]#lsmainmain.py[root@Serverdist]#[root@Serverdist]#./mainINFO:Startedserverprocess[9304]INFO:Waitingforapplicationstartup.INFO:Applicationstartupcomplete.INFO:Uvicornrunningonhttp://0.0.0.0:8001(PressCTRL+Ctoquit)123456786常见报错6.1Linux环境打包报错打包时报如下错误:PyInstaller.exceptions.PythonLibraryNotFoundErrorythonlibrarynotfound:libpython3.10.so,libpython3.10.so.1.0ThismeansyourPythoninstallationdoesnotcomewithpropersharedlibraryfiles.Thisusuallyhappensduetomissingdevelopmentpackage,orunsuitablebuildparametersofthePythoninstallation.1234解决方案如下:重新编译python,加入--enable-shared选项:./configure--prefix=/usr/local/python3--enable-shared1然后执行make&makeinstall命令重新编译安装。然后执行如下命令:$echo"/usr/local/python3/lib/">>/etc/ld.so.conf$ldconfig12--THEEND--
|
|