我正在尝试通过修改spec文件中的二进制文件从生成的安装程序中删除所有Windows dll,基本上是删除所有以“ api”开头的dll
a = Analysis(['PseudoDialog.py'],
pathex=['D:\\PSY'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='PseudoDialog',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False )
coll = COLLECT(exe,
a.binaries = [x for x in a.binaries if not x[0].startswith("api")],
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='PSY')
此代码失败,并显示以下错误:
SyntaxError: keyword can't be an expression on the line
a.binaries = [x for x in a.binaries if not x[0].startswith("api")]
最后我实际上不需要这样做。问题是我在运行pyinstaller时注意到了许多警告。它正在寻找许多以“ api-win-ms”为前缀的Windows dll,但工作失败。
我找到了一种通过将这些dll的位置添加到环境路径变量中来包含这些dll的方法。但是后来我意识到这些文件可能会在一个主要补丁中更改,更糟糕的是,禁止将Windows dll打包为解决方案的一部分,并将其部署在其他计算机上。
最后,我要做的就是忽略警告,并在virtualenv中运行项目,以防止pyinstaller捕获不必要的软件包和库。