PyInstaller 在打包包含 SciPy 的 Python 应用程序时遇到 ImportError: DLL load failed
错误,通常是由于缺少某些依赖项或 DLL 文件导致的。以下是一些基础概念和相关解决方案:
--hidden-import
和 --add-binary
确保所有必要的模块和库都被正确包含:
pyinstaller --hidden-import=scipy --add-binary "path_to_mkl_dll;mkl" your_script.py
hook
文件创建一个自定义的 hook 文件来确保所有依赖项都被正确包含。
hook-scipy.py
的文件,内容如下:from PyInstaller.utils.hooks import collect_dynamic_libs
binaries = collect_dynamic_libs('scipy')
pyinstaller --additional-hooks-dir=. your_script.py
conda
环境如果你使用的是 Anaconda 或 Miniconda,可以尝试在 conda 环境中安装 SciPy 并使用 PyInstaller 打包:
conda create -n myenv python=3.x scipy
conda activate myenv
pip install pyinstaller
pyinstaller your_script.py
确保所有依赖项都已正确安装。你可以使用 pip
或 conda
来安装 SciPy 及其依赖项:
pip install scipy
或
conda install scipy
假设你有一个简单的 Python 脚本 example.py
,使用了 SciPy:
import scipy.stats as stats
data = [1, 2, 3, 4, 5]
mean = stats.mean(data)
print(f"Mean: {mean}")
你可以使用以下命令进行打包:
pyinstaller --hidden-import=scipy --add-binary "path_to_mkl_dll;mkl" example.py
这种方法适用于需要将包含 SciPy 的 Python 应用程序打包成独立可执行文件的场景,例如:
通过以上方法,你应该能够解决 PyInstaller 打包 SciPy 时遇到的 ImportError: DLL load failed
错误。
领取专属 10元无门槛券
手把手带您无忧上云