使用Pyinstaller的最新踩坑实战记录

  • Post category:Python

以下是完整攻略:

使用Pyinstaller的最新踩坑实战记录

什么是Pyinstaller

Pyinstaller是一个可将Python代码打包成独立可执行文件的第三方库。打包后的文件可以在没有Python环境的计算机上运行,非常方便。

安装Pyinstaller

在命令行中输入以下命令即可安装Pyinstaller:

pip install pyinstaller

常见问题及解决方案

对于某些依赖包的处理

如果你的代码中使用了某些依赖包,打包成可执行文件时可能会失败。这时可以通过以下方法解决:

1. 使用Pyinstaller的命令行选项 –hidden-import

例如你的代码依赖于第三方库requests,你可以在命令行中添加以下选项:

pyinstaller --hidden-import=requests your_script.py

2. 修改spec文件

打包过程中,Pyinstaller会自动生成spec文件,可以通过手动修改该文件,告诉Pyinstaller需要哪些依赖库。例如,在spec文件中添加以下代码:

# This is my script spec file
# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(['your_script.py'],
             pathex=['/Users/me/myscript'],
             binaries=[],
             datas=[],
             hiddenimports=['requests'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

其中的hiddenimports参数就是告诉Pyinstaller你的代码需要使用requests库。

对于打包完成后的文件体积过大的处理

如果使用Pyinstaller打包后生成的文件体积过大,可以考虑以下方法解决:

1. 指定Pyinstaller的命令行选项

可以使用以下命令行选项控制打包后的文件体积:

pyinstaller -F --strip your_script.py

其中-F指定打包成单个可执行文件,--strip指定剥离符号表(symbol table),可以减小文件大小。

2. 抽离Python解释器

在默认情况下,Pyinstaller会将整个Python解释器一起打包到可执行文件中。可以使用以下命令选项抽离Python解释器,减小文件体积:

pyinstaller -F --onefile --name=myprogram --add-data='path/to/python:./python' your_script.py

其中-F--onefile参数指定打包成单个可执行文件,--name指定可执行文件名,--add-data指定Python解释器所在路径,并将其抽离到当前目录下的python文件夹中。

示例说明

示例1:依赖第三方库

例如有以下代码:

import requests

response = requests.get('http://www.example.com')
print(response.status_code)

如果直接使用Pyinstaller打包,可能会出现打包失败的情况,因为requests库是第三方库。

这时可以在命令行中添加--hidden-import选项,告诉Pyinstaller需要使用requests库:

pyinstaller --hidden-import=requests your_script.py

示例2:打包文件体积过大

例如有以下代码:

print("Hello World!")

如果使用默认选项打包,生成的可执行文件体积可能会很大,几十MB甚至上百MB。

这时可以使用以下命令行选项控制打包后的文件体积:

pyinstaller -F --strip your_script.py

这样生成的可执行文件体积会变小很多。