使用 UPX 压缩和

问题描述

我试图解决这个问题几天了,但找不到答案。

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

非常感谢任何帮助,谢谢! (:

详情:

librosa 钩子文件

from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files('librosa')

我制作了一个简单的用例来重建错误('pip install tr​​aceback' for trace prints):

pyinstaller=4.1(后续版本同样错误), librosa=0.8.0(试过降级,还是没有运气) 蟒蛇 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,module.__dict__)
  File "librosa\core\__init__.py",module.__dict__)
  File "librosa\core\audio.py",line 11,module.__dict__)
  File "scipy\signal\__init__.py",line 292,module.__dict__)
  File "scipy\signal\windows\__init__.py",line 41,module.__dict__)
  File "scipy\signal\windows\windows.py",line 7,module.__dict__)
  File "scipy\fft\__init__.py",line 74,module.__dict__)
  File "scipy\fft\_basic.py",line 1,module.__dict__)
  File "scipy\_lib\uarray.py",line 28,module.__dict__)
  File "scipy\_lib\_uarray\__init__.py",line 115,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.**

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)