|
文章目录一、为什么要用conda虚拟环境二、pyinstaller用法2.1安装PyInstaller2.2基本用法打包一个Python脚本2.21打包一个Python项目2.22打包选项2.3打包依赖项2.31导出依赖项列表2.32配置依赖项2.4自定义打包选项2.5打包完成后的文件2.6注意事项三、打包示例一、为什么要用conda虚拟环境第一点是,pyinstaller打包需要指定程序中使用的库的路径,新手在这一点上很容易出现问题,导致打包后的exe程序执行的时候显示缺少模块。这个问题可能并不能通过简单地指定路径来解决。第二点就是使用虚拟环境本身的好处了:可以创建多个不同的Python环境,每个环境可以安装不同版本的Python和不同的包,避免了包之间的冲突和依赖问题。可以方便地切换和管理不同的Python环境,只需要使用activate和deactivate命令即可。可以使用conda命令来安装和更新包,不需要使用pip或其他工具。conda还可以安装一些非Python的包,比如gcc,nodejs,cuda等。可以使用conda-forge等第三方源来获取更多的包,或者使用自定义的源来安装私有的包。可以使用condaexport和condaenvcreate命令来导出和导入环境配置文件,方便在不同的机器上复制相同的环境。当你进入一个conda虚拟环境后(condaactivatexxx),可以使用condainstall和pipinstall安装不同的包,因为某些包可能在conda源中没有。虚拟环境的创建和使用很简单,不是本文的主题,这里不赘述了。二、pyinstaller用法PyInstaller是一个用于将Python程序打包成可执行文件的强大工具。它允许你将你的Python代码、依赖项和解释器一起打包成一个独立的可执行文件,无需用户安装Python或其他依赖项。2.1安装PyInstaller首先进入项目所在的虚拟环境:打开AnacondaPowershellPrompt(为什么不直接用Powershell?可以,但不建议,你可以从我本专栏前面的文章找到答案),进入项目所在虚拟环境:condaactivateyt_dlp_env1安装pyinstaller:condainstallpyinstaller1现在,先看第三节:实际使用示例,然后再回来看第二节。2.2基本用法打包一个Python脚本假设你有一个名为my_script.py的Python脚本,想将其打包成可执行文件。你可以在命令行中执行以下命令:pyinstallermy_script.py1这将在当前目录下创建一个dist文件夹,其中包含了可执行文件。你可以在dist文件夹中找到my_script(或my_script.exe,取决于你的操作系统)可执行文件。2.21打包一个Python项目如果你的项目包含多个文件,你可以将整个项目目录作为参数传递给PyInstaller。例如:pyinstallermy_project_directory1这将在dist文件夹中创建一个可执行文件,其中包含了整个项目的所有文件和依赖项。2.22打包选项PyInstaller支持许多选项,以便你根据需要自定义打包过程。一些常用的选项包括:打包选项:-F或--onefile:生成单个可执行文件。-D或--onedir:生成一个包含多个文件的目录。-w或--windowed:创建一个窗口应用程序,没有控制台窗口。-c或--console:创建一个带有控制台窗口的命令行应用程序。-m或--name:指定生成的可执行文件的名称。--add-data:添加额外的数据文件到可执行文件中。导入选项:-p或--paths:添加搜索Python模块的路径。--hidden-import:指定需要手动导入但不在源代码中明确导入的模块。打包配置选项:--name:指定生成的可执行文件的名称。--icon:指定可执行文件的图标文件。--version-file:指定版本信息文件。--upx-dir:指定UPX可执行文件压缩工具的目录。调试选项:--debug:生成带有调试信息的可执行文件。优化选项:-O或--optimize:使用优化编译Python文件。--noconfirm:禁用优化编译确认提示。其他选项:-h或--help:显示帮助信息。--clean:清理临时文件。--noconfirm:在覆盖现有输出目录时不进行确认。--noconsole:不显示控制台--python:指定python解释器的路径。这只是一些常用的PyInstaller参数,实际上有更多选项可用于更复杂的定制。你可以使用pyinstaller--help命令来查看完整的参数列表和说明。例如,要生成一个单独的可执行文件并指定其名称,你可以使用以下命令:pyinstaller-F-nmy_appmy_script.py1这将生成一个名为my_app的单独可执行文件。2.3打包依赖项当使用PyInstaller来打包Python应用程序时,你可以使用一系列重要的选项来设置依赖项和配置生成的可执行文件。以下是一些关键的依赖设置选项:--hidden-import:通过该选项,你可以指定需要手动导入但不在源代码中明确导入的模块。这对于确保PyInstaller能够识别和包含所有依赖项非常有用。pyinstaller--hidden-importmodule_namescript.py1--exclude-module:使用该选项可以排除特定模块,不包含在生成的可执行文件中。pyinstaller--exclude-modulemodule_namescript.py1--add-binary:允许将外部二进制文件添加到生成的可执行文件中,这对于包含一些外部库非常有用。pyinstaller--add-binary"path/to/binary;destination/folder"script.py1--add-data:类似于--add-binary,但用于添加外部数据文件到生成的可执行文件中。pyinstaller--add-data"path/to/data;destination/folder"script.py1--paths:通过指定额外的模块搜索路径,可以确保PyInstaller能够找到依赖项的位置。pyinstaller--pathspath/to/modulesscript.py1你也可以手动👇👇2.31导出依赖项列表你可以使用以下命令导出项目的依赖项列表:pyinstaller--name=my_app--onefilemy_script.py--path=/path/to/dependencies1这将创建一个my_app.spec文件,其中包含了项目的依赖项列表。2.32配置依赖项编辑my_app.spec文件并添加依赖项的路径,如下所示:#...a=Analysis(['my_script.py'],pathex=['/path/to/project'],binaries=[],datas=[],...pathex=['/path/to/dependencies'],#添加依赖项路径...)#...12345678910然后,使用以下命令来根据修改后的my_app.spec文件打包项目:pyinstallermy_app.spec1这将使用指定的依赖项路径打包项目。2.4自定义打包选项如果你需要更多的自定义选项,可以编辑my_app.spec文件并进行更详细的配置。你可以设置各种选项,包括文件和目录的排除和包含、运行时选项等。详细信息可以在PyInstaller的官方文档中找到。2.5打包完成后的文件成功打包后,你将在dist目录中找到生成的可执行文件。这个文件可以在没有安装Python解释器或其他依赖项的情况下在目标系统上运行。2.6注意事项打包大小:可执行文件的大小可能会比原始Python代码大很多,因为它包含了Python解释器和依赖项。你可以通过精简依赖项来减小可执行文件的大小。跨平台问题:PyInstaller支持在不同的操作系统上打包应用程序,但需要在相应的操作系统上运行PyInstaller。三、打包示例打包如下程序:(1)打开AnacondaPowershellPrompt,进入项目所在虚拟环境:condaactivateyt_dlp_env1(2)进入程序所在目录:cdD:\Python_Study\VideoDownload1(3)打包:pyinstaller-F--paths=E:\anaconda3\envs\yt_dlp_env\Lib\site-packages--python=E:\anaconda3\envs\yt_dlp_env\python.exe--icon=wx2.ico--name=DownloaderDLP_GUI_Perfect.py1参数说明:-F:打包成一个可执行文件;--path:指定python模块的搜索路径;--python:指定python解释器路径;--icon:可执行文件的图标--name:可执行文件名称(3)在文件所在目录,打开dist文件夹,即可看到打包好的exe文件;(4)直接打开即可运行,发送给别人也是如此(跨平台应该不行)。打包好的exe程序运行时是会打开一个控制台窗口的,有时候是不需要的,比如你是一个GUI的程序。在使用PyInstaller打包时,你可以使用--noconsole选项来告诉PyInstaller生成一个窗口应用程序而不是控制台应用程序:pyinstaller-F--paths=E:\anaconda3\envs\yt_dlp_env\Lib\site-packages--python=E:\anaconda3\envs\yt_dlp_env\python.exe--noconsole--icon=wx2.ico--name=DownloaderDLP_GUI_Perfect.py1但不建议第一次就这样打包,留着控制台,可以查看程序运行报错情况,因为依赖很多的情况下,可能存在依赖没完全指定的情况。除了依赖问题,还有pyinstaller本身的问题,打包后,可能会改变一些程序的运行逻辑或者某个过程的编码、或者资源访问方式等等。不仅需要注意打包参数的设置,可能还需要修改源代码。因此,需要多次调试才能打包好一个程序(复杂一些的),可以使用--debug参数打包,进行调试。
|
|