我试图解决这个问题几天了,但找不到答案。
我正在构建一个桌面程序并使用 Pyinstaller 打包它。它可以工作,但即使使用 --onefile、--onedir 和 virtualenv,分布大小也非常大。我尝试使用 UPX 来减小 dist 大小,结果大小还可以,但是在激活 exe 时它不起作用。
任何帮助将不胜感激,谢谢!(:
细节:
librosa 挂钩文件:
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files('librosa')
我制作了一个简单的用例来重建错误('pip install traceback' 用于跟踪打印):
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.**