使用wandb遇意外chardet依赖问题:修复方法及成因解析
导入wandb时chardet相关依赖错误的原因分析
报错详情
import wandb ... Traceback (most recent call last): File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/requests/compat.py", line 11, in <module> import chardet ModuleNotFoundError: No module named 'chardet' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "<string>", line 1, in <module> File "/afs/cs.stanford.edu/u/brando9/ultimate-utils/ultimate-utils-proj-src/uutils/__init__.py", line 52, in <module> from uutils.logging_uu.wandb_logging.common import setup_wandb File "/afs/cs.stanford.edu/u/brando9/ultimate-utils/ultimate-utils-proj-src/uutils/logging_uu/wandb_logging/common.py", line 8, in <module> import wandb File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/wandb/__init__.py", line 26, in <module> from wandb import sdk as wandb_sdk File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/wandb/sdk/__init__.py", line 3, in <module> from . import wandb_helper as helper # noqa: F401 File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/wandb/sdk/wandb_helper.py", line 6, in <module> from .lib import config_util File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/wandb/sdk/lib/config_util.py", line 10, in <module> from wandb.util import load_yaml File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/wandb/util.py", line 49, in <module> import requests File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/requests/__init__.py", line 45, in <module> from .exceptions import RequestsDependencyWarning File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/requests/exceptions.py", line 9, in <module> from .compat import JSONDecodeError as CompatJSONDecodeError File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/requests/compat.py", line 13, in <module> import charset_normalizer as chardet File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/charset_normalizer/__init__.py", line 23, in <module> from charset_normalizer.api import from_fp, from_path, from_bytes, normalize File "/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/charset_normalizer/api.py", line 10, in <module> from charset_normalizer.md import mess_ratio File "charset_normalizer/md.py", line 5, in <module> ImportError: cannot import name 'COMMON_SAFE_ASCII_CHARACTERS' from 'charset_normalizer.constant' (/lfs/ampere1/0/brando9/miniconda/envs/data_quality/lib/python3.10/site-packages/charset_normalizer/constant.py) (data_quality) brando9~ $ pip install chardet Collecting chardet Downloading chardet-5.1.0-py3-none-any.whl (199 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.1/199.1 kB 7.7 MB/s eta 0:00:00 Installing collected packages: chardet Successfully installed chardet-5.1.0
临时解决方法
执行以下命令后问题得到解决:
pip install --upgrade pip pip install chardet # 修复wandb异常可能需要
问题原因
从报错链可以拆解出两个核心问题:
- requests的降级兼容机制触发异常:requests在
compat.py中会优先尝试导入chardet,如果找不到则会导入charset_normalizer并将其作为chardet的替代使用。你的环境中原本未安装chardet,因此触发了降级逻辑。 - charset_normalizer安装异常:降级到
charset_normalizer后,出现了ImportError,提示无法从charset_normalizer.constant中导入COMMON_SAFE_ASCII_CHARACTERS,这说明该包的安装可能不完整、文件损坏,或者版本与当前requests/Python环境存在兼容性冲突。
安装chardet后,requests会直接使用官方的chardet库,跳过了有问题的charset_normalizer,因此错误被解决。升级pip则是为了修复pip自身的版本问题,确保后续依赖安装的完整性和兼容性。
补充验证脚本
以下脚本也能解决问题,同时额外处理了cchardet和wandb版本:
pip install --upgrade pip pip install wandb --upgrade if ! pip show chardet > /dev/null; then pip install chardet fi if ! pip show cchardet > /dev/null; then pip install cchardet fi python -c "import uutils; uutils.torch_uu.gpu_test()"
内容的提问来源于stack exchange,提问作者Charlie Parker
相关产品推荐
相关产品推荐

