您可以通过添加 gpg 二进制文件及其所有依赖项 using the Analysis.datas key 将 GnuPG 与 PyInstaller 构建的应用程序打包。
窗口
在 Windows 上,我可以通过反复试验来解决这个问题。首先,我只是在整个系统中搜索了 gpg.exe 二进制文件。在 powershell 中:
> Get-Command gpg
0.0.0.0 C:\Program Files\Git\usr\bin\gpg.exe
>
然后我通过更改此部分将其添加到我的 PyInstaller .spec 文件中
a = Analysis(['..\\src\\main.py'],
pathex=['.\\'],
binaries=[],
datas=[],
hiddenimports=['pkg_resources.py2_warn', 'libusb1'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
进入这个
a = Analysis(['..\\src\\main.py'],
pathex=['.\\'],
binaries=[],
datas=
[
('C:\\Program Files\\Git\\usr\\bin\\gpg.exe', '.'), ],
hiddenimports=['pkg_resources.py2_warn', 'libusb1'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
以上修改后,我的应用会弹出警告错误,如:
The code execution cannot proceed because msys-bz2-1.dll was not found. Reinstalling the program may fix this problem.
一个接一个,我一直在寻找(如上所示在powershell中使用Get-Command)并添加它抱怨的.dll文件,直到我在上面的规范文件中的datas具有以下内容,这有效:
datas=
[
( '..\\KEYS', '.' ),
('C:\\Program Files\\Git\\usr\\bin\\gpg.exe', '.'),
('C:\\msys64\\usr\\bin\\msys-bz2-1.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-assuan-0.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-gcrypt-20.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-gpg-error-0.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-2.0.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-readline8.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-z.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-sqlite3-0.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-iconv-2.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-intl-8.dll', '.'),
('C:\\msys64\\usr\\bin\\msys-ncursesw6.dll', '.'),
],
您可以在此处查看我的完整构建脚本和.spec 文件:
MacOS
在 MacOS 中,我发现我不必添加任何依赖项——只需添加可执行文件。
datas=[ ('/usr/local/bin/gpg', '.') ],
您可以在此处查看我的完整构建脚本和.spec 文件:
Linux
我实际上并没有使用 PyInstaller 为 Linux 构建版本,因为我使用的是 AppImage。
要查看我的 Linux 完整构建脚本,请参阅: