Удалите файлы из PyInstaller, используя файл Spe c - PullRequest
0 голосов
/ 25 января 2020

У меня проблема с исключением некоторых больших DLL-файлов, которые не нужны, но включены по умолчанию. Я попробовал решение ниже, но после компиляции эти файлы все еще существуют!

d3dcompiler_47.dll
_ssl.pyd
_hashlib.pyd
libcrypto-1_1.dll
libGLESv2.dll
opengl32sw.dll
Qt5Network.dll
Qt5Qml.dll
Qt5QmlModels.dll

Я использую эту команду для генерации файла spe c:

pyi-makespec --add-binary *.dll;. --windowed --onedir --noupx --name "AppName" --version-file=version.txt --icon=main.ico main.py

Вот сгенерированный файл spe c:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['main.py'],
             pathex=['C:\\Users\\user\\Desktop\\win'],
             binaries=[('*.dll', '.')],
             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='AppName',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=False,
          console=False , version='version.txt', icon='main.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=False,
               upx_exclude=[],
               name='AppName')

Затем я редактирую файл spe c так:

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['main.py'],
             pathex=['C:\\Users\\user\\Desktop\\win'],
             binaries=[('*.dll', '.')],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

a.binaries = a.binaries - TOC([
  ('d3dcompiler_47.dll', None, None),
  ('_ssl.pyd', None, None),
  ('_hashlib.pyd', None, None),
  ('libcrypto-1_1.dll', None, None),
  ('libGLESv2.dll', None, None),
  ('opengl32sw.dll', None, None),
  ('Qt5Network.dll', None, None),
  ('Qt5Qml.dll', None, None),
  ('Qt5QmlModels.dll', None, None)
])

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          [],
          exclude_binaries=True,
          name='AppName',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=False,
          console=False , version='version.txt', icon='main.ico')
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas,
               strip=False,
               upx=False,
               upx_exclude=[],
               name='AppName')

И, наконец, использую эту команду для компиляции, используя новый файл spe c:

C:\Python\python -m PyInstaller --noupx --windowed --onedir "AppName.spec"

Может кто-нибудь сказать мне, что я делаю не так?

Любая помощь с благодарностью.

Спасибо.

...