修改spec文件中的二进制文件时Pyinstaller不工作

2024-04-25 07:56:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过修改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,但工作失败了。你知道吗

我找到了一种方法,通过将它们的位置添加到环境path变量中来包含这些DLL。但后来我意识到,这些文件可能会在一个主要补丁中发生变化,更糟糕的是,禁止将windows dll打包为解决方案的一部分,并将它们部署到其他机器上。你知道吗

最后,我所需要做的就是忽略警告并在virtualenv中运行项目,以防止pyinstaller获取大量不必要的包和库。你知道吗


Tags: 文件apifalsetruewindowsblockexewin