0

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

我正在构建一个桌面程序并使用 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' 用于跟踪打印):

pyinstaller=4.1(以后版本同样的错误),librosa=0.8.0(尝试降级,还是不行) Python 3.8.1 Win 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.**
4

0 回答 0