修改规范文件中的二进制文件后,Pyinstaller无法运行

时间:2019-05-17 10:07:24

标签: python pyinstaller

我正在尝试通过修改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捕获不必要的软件包和库。

0 个答案:

没有答案