ImportError: cannot import name ‘download‘ from ‘aistudio_sdk.hub‘ (/opt/conda/envs/pure-paddle/lib/
import paddlenlp的时候报错
File ~/external-libraries/lib/python3.10/site-packages/paddlenlp/transformers/utils.py:59
56 from paddlenlp.utils.log import logger
58 from ..utils.download import resolve_file_path
---> 59 from .aistudio_utils import aistudio_download
61 HUGGINGFACE_CO_RESOLVE_ENDPOINT = "https://huggingface.co"
64 def convert_ndarray_dtype(np_array: np.ndarray, target_dtype: str) -> np.ndarray:
File ~/external-libraries/lib/python3.10/site-packages/paddlenlp/transformers/aistudio_utils.py:17
1 # Copyright (c) 2023 PaddlePaddle Authors. All Rights Reserved.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
(...)
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 from typing import Optional
---> 17 from aistudio_sdk.hub import download
20 class UnauthorizedError(Exception):
21 pass
ImportError: cannot import name 'download' from 'aistudio_sdk.hub' (/opt/conda/envs/pure-paddle/lib/python3.10/site-packages/aistudio_sdk/hub.py)
文心回答
根据您提供的错误信息和相关搜索结果,这个问题是由于 aistudio_sdk 包的版本不兼容导致的。具体来说,您安装的 aistudio_sdk 版本(可能是 0.3.0 或更高)在其 hub 模块中已经移除了 download 函数,而您当前使用的 PaddleNLP 版本中的 aistudio_utils.py 文件仍然尝试从这个位置导入该函数,从而引发了 ImportError。
解决方案
您可以通过以下几种方法来解决此问题:
方案一:降级 aistudio_sdk(推荐且最直接的方案)
这是目前最有效且被广泛验证的解决方案。将 aistudio_sdk 降级到与 PaddleNLP 兼容的 0.2.6 版本。
操作步骤:
首先卸载当前版本的 aistudio_sdk:
bash
pip uninstall aistudio-sdk
安装指定的 0.2.6 版本:
bash
pip install aistudio-sdk==0.2.6
原理说明:
根据搜索结果分析,PaddleNLP 的 transformers 模块在编写时依赖的是 aistudio_sdk 0.2.6 版本的 API。在 0.3.0 版本中,aistudio_sdk 进行了不向后兼容的更新,移除了 hub.download 函数,导致了当前的导入错误。降级可以恢复兼容性。
方案二:检查并处理依赖冲突
如果您在同一个环境中还需要使用其他依赖高版本 aistudio_sdk 的库(例如搜索结果中提到的 paddleocr 可能需要 0.3.8),则会产生版本冲突。
处理建议:
创建独立的虚拟环境:为不同的项目创建独立的 Python 虚拟环境(如使用 conda 或 venv),在每个环境中安装特定版本组合的依赖包,这是管理复杂依赖关系的最佳实践。
等待官方更新:关注 PaddleNLP 的官方版本发布。开发团队可能已经在后续版本中修复了此兼容性问题,或将依赖版本要求更新。您可以尝试升级到最新的 PaddleNLP 稳定版。
方案三:临时修改代码(高级用户)
如果您熟悉 Python 并希望快速验证,可以临时修改 PaddleNLP 的源代码。但请注意,这并非长久之计,重新安装包时修改会被覆盖。
操作思路:
找到报错文件 .../paddlenlp/transformers/aistudio_utils.py,将第17行左右的导入语句:
python
from aistudio_sdk.hub import download
根据搜索结果中 aistudio_sdk 0.3.0+ 的新API,尝试修改为从新模块导入,例如(具体需参考最新SDK文档确认):
python
# 注意:以下为示例,具体导入路径需根据 aistudio_sdk 实际版本确认
from aistudio_sdk.snapshot_download import snapshot_download as download
注意: 此方法需要您确切知道新版本中对应功能的正确导入路径,且每次重装PaddleNLP都需再次修改,不推荐生产环境使用。
总结与建议
首选方案一:直接执行 pip install aistudio-sdk==0.2.6 是解决当前导入错误最快、最可靠的方法。
排查环境:执行方案一前,建议先使用 pip show aistudio-sdk 或 pip list | grep aistudio 命令确认当前安装的版本。
长远考虑:对于需要同时使用多个有版本冲突的Paddle系列库的项目,强烈建议使用虚拟环境进行隔离。
关注更新:可以查阅 PaddleNLP 的官方GitHub仓库或文档,看是否有新版本已解决此依赖问题。
希望这些详细的步骤能帮助您解决问题!如果尝试后仍有其他报错,可以提供更多信息以便进一步分析。