pyinstaller封装后的exe文件打开失败

unhandled exception in script

Failed to execute script 'mainv1' due to unhandled exception: No module named 'scipy.special._cdflib'

Traceback (most recent call last):
  File "mainv1.py", line 16, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "function\kpifocast.py", line 3, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "statsmodels\tsa\arima\model.py", line 14, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "statsmodels\tsa\statespace\sarimax.py", line 19, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "statsmodels\tsa\arima\specification.py", line 11, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "statsmodels\tsa\base\tsa_model.py", line 28, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "statsmodels\base\model.py", line 10, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "scipy\__init__.py", line 162, in __getattr__
  File "importlib\__init__.py", line 127, in import_module
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "scipy\stats\__init__.py", line 606, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "scipy\stats\_stats_py.py", line 38, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "scipy\spatial\__init__.py", line 116, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "scipy\spatial\_geometric_slerp.py", line 9, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "scipy\spatial\distance.py", line 121, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "PyInstaller\loader\pyimod02_importers.py", line 419, in exec_module
  File "scipy\special\__init__.py", line 777, in <module>
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
  File "scipy\\special\\_ufuncs.pyx", line 1, in init scipy.special._ufuncs
  File "C:\Users\ASUS\AppData\Local\Temp\embedded.yxwbxp7o.zip\shibokensupport\__feature__.py", line 142, in _import
ModuleNotFoundError: No module named 'scipy.special._cdflib'
 

====================使用方法一======已解决=======

你遇到的问题是因为 `pyinstaller` 在打包过程中未能正确处理 `scipy` 的某些依赖项,特别是 `scipy.special._cdflib`。这通常是因为 `scipy` 的一些动态链接库(DLL)未被正确包含在最终的可执行文件中。

要解决这个问题,可以尝试以下几种方法:

### 方法一:手动包含缺失的模块

1. **创建一个 `.spec` 文件**:
   使用 `pyinstaller` 生成一个 `.spec` 文件,然后手动编辑这个文件来包含缺失的模块。

   ```sh
   pyinstaller --name mainv1 --onefile --noconsole --specpath ./ --name mainv1 mainv1.py
   ```

2. **编辑 `.spec` 文件**:
   打开生成的 `mainv1.spec` 文件,找到 `Analysis` 部分,添加 `hiddenimports` 来包含缺失的模块。

   ```python
   a = Analysis(
       ['mainv1.py'],
       pathex=['.'],
       binaries=[],
       datas=[],
       hiddenimports=['scipy.special._cdflib'],
       hookspath=[],
       runtime_hooks=[],
       excludes=[],
       win_no_prefer_redirects=False,
       win_private_assemblies=False,
       cipher=block_cipher,
   )
   ```

3. **重新生成可执行文件**:
   使用编辑后的 `.spec` 文件重新生成可执行文件。

   ```sh
   pyinstaller mainv1.spec
   ```

### 方法二:使用 `--hidden-import` 选项

你也可以在 `pyinstaller` 命令中直接使用 `--hidden-import` 选项来包含缺失的模块。

```sh
pyinstaller --name mainv1 --onefile --noconsole --hidden-import=scipy.special._cdflib mainv1.py
```

### 方法三:安装 `scipy` 的最新版本

有时候,问题可能是由于 `scipy` 版本的问题。确保你使用的是最新版本的 `scipy`。

```sh
pip install --upgrade scipy
```

### 方法四:检查环境变量

确保你的环境中没有缺失的 DLL 文件。你可以使用 `dependencywalker` 工具来检查生成的可执行文件是否有缺失的依赖。

### 方法五:使用 `--collect-submodules` 选项

`pyinstaller` 提供了一个 `--collect-submodules` 选项,可以收集所有子模块。

```sh
pyinstaller --name mainv1 --onefile --noconsole --collect-submodules=scipy mainv1.py
```

### 综合示例

结合上述方法,你可以尝试以下综合命令:

```sh
pyinstaller --name mainv1 --onefile --noconsole --hidden-import=scipy.special._cdflib --collect-submodules=scipy mainv1.py
```

------------------最常用这条综合命令--------------------------------------

### 验证

生成的可执行文件将位于 `dist` 目录中。你可以运行生成的可执行文件来验证是否解决了问题。

希望这些方法能帮助你解决问题!如果有任何其他问题,请随时告知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值