python之pyinstaller组件打包命令和异常解析实战

  • Post category:Python

下面是关于”Python之PyInstaller组件打包命令和异常解析实战”的完整攻略。

什么是PyInstaller

PyInstaller是一个能够将Python代码打包成可执行文件(exe、dmg)的工具,支持将程序打包成单个文件,亦可以将程序打包成多个文件放到同一目录下,使得程序的分发和运行更加方便。

PyInstaller的安装和使用

  1. 安装PyInstaller

PyInstaller可以使用pip安装,打开命令行窗口(Win + R,输入cmd,然后点击确定),输入以下命令:

pip install pyinstaller
  1. 打包你的Python程序

假设我们已经编写好了一个Python程序hello.py,想要将其打包成可执行程序,只需要在命令行窗口中输入以下命令:

pyinstaller hello.py

该命令会在当前文件夹下生成一个dist文件夹,其中包含了可执行文件以及一些其他必需的文件。

需要注意的是,如果你的程序用到了外部依赖,打包时需使用–hidden-import参数将其加入到打包的列表中。

举个例子,假设我们使用了Pillow库来处理图片,需要在打包时加入该库,命令如下:

pyinstaller hello.py --hidden-import=Pillow

PyInstaller的异常解析

在使用PyInstaller打包过程中,可能会遇到一些奇怪的异常,这时候需要我们去查找问题并解决。

1. FileNotFoundError: [Errno 2] No such file or directory: XXX

这个异常代表某个文件不存在,通常是因为PyInstaller没有将其打包进可执行文件中。

解决方法:对该文件使用–add-data参数进行打包。例如:

pyinstaller hello.py --add-data 'path/to/file;path/in/bundle'

此命令将path/to/file文件添加到可执行文件中,并且在运行时该文件将放置于path/in/bundle目录下。

需要注意的是,如果该文件是程序的依赖文件,可能需要使用–hidden-import参数将其添加到隐含的依赖文件中。

2. ModuleNotFoundError: No module named ‘XXX’

这个异常通常是因为某个依赖库没有被打包进可执行文件中,或者依赖库的版本不兼容。

解决方法:使用–hidden-import参数将依赖库添加到隐含的依赖文件中。如果依赖库的版本不兼容,可以尝试安装更低的版本或者更高的版本,并使用–additional-hooks-dir参数指定hooks文件夹。

例如:

pyinstaller hello.py --hidden-import=XXX --additional-hooks-dir=hooks_folder

其中XXX为缺失的依赖库的名称,hooks_folder为hooks文件夹的路径。

示例说明

示例1:将一个Python程序打包成可执行文件

假设我们已经编写好了一个程序hello.py,其代码如下:

print('Hello PyInstaller!')

现在我们要将其打包成可执行程序,只需在命令行窗口中输入以下命令:

pyinstaller hello.py

执行后,将会在当前目录下生成dist文件夹,其中包含了可执行文件以及一些其他必需的文件。

示例2:将一个Python程序打包成单个exe文件

假设我们已经编写好了一个程序hello.py,并且用到了Pillow库来处理图片,现在我们要将其打包成单个exe文件。

只需在命令行窗口中输入以下命令:

pyinstaller --onefile --hidden-import=Pillow hello.py

执行后,将会在当前目录下生成dist文件夹,其中只包含一个名为hello.exe的可执行文件。这个可执行文件就是我们需要的最终产品。

需要注意的是,在使用–onefile参数时,如果依赖库比较多,打包后的可执行文件可能会比较大。此时可以使用–add-binary参数将某些库以二进制的形式添加到可执行文件中。

例如,我们要将Pillow库以二进制形式添加到可执行文件中,可以使用以下命令:

pyinstaller --onefile --add-binary 'C:\Python\Lib\site-packages\Pillow\*.dll;Pillow' hello.py

其中’C:\Python\Lib\site-packages\Pillow*.dll’是Pillow库所在文件夹中的全部.dll文件,’Pillow’表示将其放置于可执行文件的Pillow文件夹中。需要注意的是,该路径可能因系统环境的不同而不同。