Python 使用UPX压缩和

Python 使用UPX压缩和,python,hook,pyinstaller,librosa,upx,Python,Hook,Pyinstaller,Librosa,Upx,我花了几天时间试图解决这个问题,但都找不到答案 我正在构建一个桌面程序,并使用Pyinstaller进行打包。它可以工作,但分布大小不同 即使在使用--onefile、-onedir和virtualenv时也非常大。我尝试使用UPX来减小dist大小,结果大小还可以,但当exe被激活时它就不起作用了 非常感谢您的帮助,谢谢!(: 详情: librosa钩子文件: from PyInstaller.utils.hooks import collect_data_files datas = coll

我花了几天时间试图解决这个问题,但都找不到答案

我正在构建一个桌面程序,并使用Pyinstaller进行打包。它可以工作,但分布大小不同 即使在使用--onefile、-onedir和virtualenv时也非常大。我尝试使用UPX来减小dist大小,结果大小还可以,但当exe被激活时它就不起作用了

非常感谢您的帮助,谢谢!(:

详情:

librosa钩子文件:

from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files('librosa')
我已经生成了一个简单的用例来重建错误(“跟踪打印的pip安装回溯”):

pyinstaller=4.1(在更高版本中出现相同错误), librosa=0.8.0(试图降级,但仍然没有运气) Python 3.8.1 赢10分

生成exe行: venv\Scripts\pyinstaller.exe--upx dir=..\..\..\..\utilities\upx-3.96-win64 main.spec

main.py-除“import librosa”之外的所有行都用于监视:

try:
    print('starting import..')
    import sys, os
    import time
    import traceback

    import librosa  # problematic line
    print('finished import')

# for prints
except Exception as e:
    print('Exception was thrown')
    print(e)
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    print(exc_type, fname, exc_tb.tb_lineno)
    print()
    traceback.print_exc()
    time.sleep(50)
main.spec文件:

block_cipher = None
a = Analysis(['main.py'],
             pathex=['C:\\Git\\Research\\upx_ovf'],
             binaries=[],
             datas=[],
             hiddenimports=['scipy.spatial.transform._rotation_groups','sklearn.utils._weight_vector'],
             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,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='main',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )
我得到的错误是:

starting import..
Exception was thrown!
__DLL load failed while importing _uarray: A dynamic link library (DLL) initialization routine failed.
<class 'ImportError'> main.py__

Traceback (most recent call last):
  File "main.py", line 6, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "librosa\__init__.py", line 211, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "librosa\core\__init__.py", line 6, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "librosa\core\audio.py", line 11, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "scipy\signal\__init__.py", line 292, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "scipy\signal\windows\__init__.py", line 41, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "scipy\signal\windows\windows.py", line 7, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "scipy\fft\__init__.py", line 74, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "scipy\fft\_basic.py", line 1, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "scipy\_lib\uarray.py", line 28, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "scipy\_lib\_uarray\__init__.py", line 115, in <module>
  File "c:\git\research\upx_ovf\venv\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
    exec(bytecode, module.__dict__)
  File "scipy\_lib\_uarray\_backend.py", line 4, in <module>
**ImportError: DLL load failed while importing _uarray: A dynamic link library (DLL) initialization routine failed.**
开始导入。。
异常被抛出!
__导入_uarray时DLL加载失败:动态链接库(DLL)初始化例程失败。
main.py__
回溯(最近一次呼叫最后一次):
文件“main.py”,第6行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“librosa\\ uuuu init\ uuuuu.py”,第211行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“librosa\core\\uuuuu init\uuuuuu.py”,第6行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“librosa\core\audio.py”,第11行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“scipy\signal\\uuuuu init\uuuuuu.py”,第292行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“scipy\signal\windows\\uuuuu init\uuuuuu.py”,第41行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“scipy\signal\windows\windows.py”,第7行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“scipy\fft\\uuuuu init\uuuuuu.py”,第74行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“scipy\fft\\ u basic.py”,第1行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“scipy\\u lib\uarray.py”,第28行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“scipy\\u lib\\u uarray\\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuu.py”,第115行,在
exec_模块中的文件“c:\git\research\upx_ovf\venv\lib\site packages\PyInstaller\loader\pyimod03_importers.py”,第493行
exec(字节码、模块、指令)
文件“scipy\\u lib\\u uarray\\u backend.py”,第4行,在
**导入错误:导入时DLL加载失败\u uarray:动态链接库(DLL)初始化例程失败**