Traceback (most recent call last): File "D:\yaogan\Paraformer-main\Paraformer-main\train.py", line 9, in <module> from trainer import trainer_dataset File "D:\yaogan\Paraformer-main\Paraformer-main\trainer.py", line 15, in <module> import rasterio File "C:\Users\xrl\AppData\Roaming\Python\Python312\site-packages\rasterio\__init__.py", line 37, in <module> from rasterio._io import Statistics File "rasterio\\_io.pyx", line 1, in init rasterio._io File "rasterio\\_base.pyx", line 21, in init rasterio._base File "C:\Users\xrl\AppData\Roaming\Python\Python312\site-packages\rasterio\rpc.py", line 1, in <module> import attr ModuleNotFoundError: No module named 'attr'
时间: 2025-03-10 21:01:28 浏览: 68
### 解决 `ModuleNotFoundError` 错误
当遇到 `ModuleNotFoundError: No module named 'attr'` 的错误时,这通常意味着在打包过程中某些依赖项未能正确识别或包含。尽管程序可以在开发环境中正常运行,但在打包后的独立可执行文件中却无法找到这些模块。
#### 方法一:手动指定隐藏导入
为了确保所有必要的模块都被 PyInstaller 正确捕获并包含在最终的可执行文件中,可以通过修改 `.spec` 文件或者直接向 PyInstaller 命令添加参数来实现这一点:
```bash
pyinstaller --hidden-import=attr -F main.py
```
此方法告知 PyInstaller 明确地将 `attr` 模块作为隐含依赖处理[^1]。
#### 方法二:创建自定义钩子脚本
如果上述简单的方法不起作用,则可能需要编写一个自定义钩子(hook) 脚本来帮助 PyInstaller 更好地理解如何处理特定库及其依赖关系。具体做法是在项目的根目录下创建名为 `hooks/` 的新文件夹,并在此文件夹内部放置针对 `rasterio` 或其他相关库的具体 hook 文件(例如 `hook-rasterio.py`),以便更精细地控制哪些资源应该被打包进去。
#### 方法三:调整环境变量与路径设置
有时,通过适当配置系统的 PYTHONPATH 环境变量或将额外的搜索路径传递给 PyInstaller 可能有助于解决问题:
```bash
set PYTHONPATH=%PYTHONPATH%;C:\path\to\your\packages
pyinstaller -p C:\path\to\your\packages -F main.py
```
这种方法允许 PyInstaller 在构建期间访问更多位置查找所需的 Python 包。
对于使用较新的 Python 版本如 3.12 来说,还需要确认所使用的第三方库是否完全支持该版本;不兼容可能会引发各种意想不到的问题。因此建议查看官方文档或 GitHub 上关于 `rasterio` 和其依赖的支持情况说明。
阅读全文
相关推荐













