PyInstaller是一个功能强大的Python打包工具,它能够将Python程序及其所有依赖项打包成独立的可执行文件。以下是对PyInstaller的详细介绍:
工作原理:
- 分析脚本:PyInstaller会分析Python脚本,识别出脚本中所引用的库和资源文件。
- 创建打包规范:根据分析结果,PyInstaller会生成一个打包规范文件,其中包含了脚本的依赖关系、资源文件等信息。
- 打包依赖库:PyInstaller会将脚本所依赖的库文件进行打包,这些库文件会被嵌入到可执行文件中。
- 生成可执行文件:根据打包规范和打包的依赖库,PyInstaller会生成一个独立的可执行文件,该文件包含了Python解释器、脚本代码和依赖的库文件。
- 运行可执行文件:生成的可执行文件可以在其他机器上直接运行,无需安装Python解释器和相关库。
常见问题及解决方案:
- 打包后的程序启动慢:当使用PyInstaller打包应用时,可能会发现生成的可执行文件启动比较慢。这是因为所有的依赖都被打包到了一个文件中,程序在启动时需要解压这些内容。解决方案是使用–onedir(默认选项)而不是–onefile,这样可以让程序快速启动,因为依赖项保持解压状态。
- 缺失库或模块:有时候,PyInstaller可能无法正确识别程序所依赖的所有库,尤其是当依赖项以动态方式导入时(例如使用__import__函数)。解决方案是在spec文件中手动添加这些缺失的模块。
- 打包后的文件体积过大:PyInstaller打包的可执行文件可能会包含很多不必要的库,导致文件体积变大。解决方案是使用–exclude-module选项来排除不需要的模块。
1. Python环境要求
在 CentOS 7 上,需要安装 Python 的开发工具包(python3-devel)。我们默认情况下,是不按照这些的,如果安装pyinstaller后,出现如下提示,需要安装python开发工具包。
运行pyinstaller,提示:
PyInstaller.exceptions.PythonLibraryNotFoundError: Python library not found: libpython3.8.so.1.0, libpython3.8.so
This means your Python installation does not come with proper shared library files.
This usually happens due to missing development package, or unsuitable build parameters of the Python installation.
1.1. CentOS7环境信息
查看安装python依赖环境glibc、gcc等。
ldd --version
ldd (GNU libc) 2.17
gcc --version
gcc (GCC) 5.4.0
查看操作系统信息。