导入ydata-profiling时遭遇Pydantic BaseSettings迁移错误求助
我尝试用以下代码导入ydata-profiling进行探索性数据分析(EDA):
from ydata_profiling import ProfileReport as pf
由于Pandas-profiling已过时,且当前环境使用Pydantic V2版本,本期望ydata-profiling能正常工作,却触发了PydanticImportError,提示BaseSettings已迁移到pydantic-settings包,完整报错堆栈如下:
PydanticImportError Traceback (most recent call last)
Cell In[14], line 1
----> 1 from ydata_profiling import ProfileReport as pfFile ~\anaconda3\Lib\site-packages\ydata_profiling_init_.py:7
1 """Main module of ydata-profiling.
2
3 .. include:: ../../README.md
4 """
5 import importlib.util
----> 7 from ydata_profiling.compare_reports import compare
8 from ydata_profiling.controller import pandas_decorator
9 from ydata_profiling.profile_report import ProfileReportFile ~\anaconda3\Lib\site-packages\ydata_profiling\compare_reports.py:9
6 import pandas as pd
7 from dacite import from_dict
----> 9 from ydata_profiling.config import Correlation, Settings
10 from ydata_profiling.model import BaseDescription
11 from ydata_profiling.model.alerts import AlertFile ~\anaconda3\Lib\site-packages\ydata_profiling\config.py:7
4 from typing import Any, Dict, List, Optional, Tuple, Union
6 import yaml
----> 7 from pydantic import BaseModel, BaseSettings, Field, PrivateAttr
10 def _merge_dictionaries(dict1: dict, dict2: dict) -> dict:
11 """
12 Recursive merge dictionaries.
13
(...)
16 :return: Merged dictionary
17 """File ~\anaconda3\Lib\site-packages\pydantic_init_.py:210, in getattr(attr_name)
208 dynamic_attr = _dynamic_imports.get(attr_name)
209 if dynamic_attr is None:
--> 210 return _getattr_migration(attr_name)
212 from importlib import import_module
214 module = import_module(_dynamic_imports[attr_name], package=package)File ~\anaconda3\Lib\site-packages\pydantic_migration.py:289, in getattr_migration.
.wrapper(name)
287 return import_string(REDIRECT_TO_V1[import_path])
288 if import_path == 'pydantic:BaseSettings':
--> 289 raise PydanticImportError(
290 'BaseSettingshas been moved to thepydantic-settingspackage. '
291 f'See https://docs.pydantic.dev/{version_short()}/migration/#basesettings-has-moved-to-pydantic-settings '
292 'for more details.'
293 )
294 if import_path in REMOVED_IN_V2:
295 raise PydanticImportError(f'{import_path}has been removed in V2.')PydanticImportError:
BaseSettingshas been moved to thepydantic-settingspackage. See https://docs.pydantic.dev/2.3/migration/#basesettings-has-moved-to-pydantic-settings for more details.For further information visit https://errors.pydantic.dev/2.3/u/import-error
可行解决方案
1. 升级ydata-profiling至兼容Pydantic V2的版本
ydata-profiling从4.5.0版本起正式支持Pydantic V2,执行以下命令更新:
pip uninstall -y ydata-profiling pip install ydata-profiling --upgrade
2. 回退Pydantic到V1版本
若暂时无需升级ydata-profiling,可安装Pydantic V1.x稳定版来适配旧版本的ydata-profiling:
pip uninstall -y pydantic pip install pydantic==1.10.12
3. 临时兼容补丁(不推荐长期使用)
需保留Pydantic V2时,可通过安装pydantic-settings并创建兼容导入的补丁:
- 先安装依赖:
pip install pydantic-settings
- 在项目目录下创建
pydantic_compat.py文件,内容如下:
from pydantic_settings import BaseSettings as _BaseSettings from pydantic import * BaseSettings = _BaseSettings
- 在导入ydata-profiling前加载兼容补丁:
import sys sys.modules['pydantic'] = __import__('pydantic_compat') from ydata_profiling import ProfileReport as pf
内容的提问来源于stack exchange,提问作者Karthik Kumar P

