使用pandas_profiling/ydata_profiling生成报告遇PydanticImportError
问题详情
尝试用两种方式生成Pandas数据集的分析报告:
第一种实现代码:
import pandas_profiling profile_report = df.profile_report()
第二种实现代码:
from ydata_profiling import ProfileReport
两种方式均触发PydanticImportError,核心错误提示为BaseSettings已迁移至pydantic-settings包,完整报错栈如下:
PydanticImportError:
BaseSettingshas been moved to thepydantic-settingspackage.
Traceback:
File "C:\Users\HP\AppData\Local\Programs\Python\Python311\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 541, in run_script
exec(code, module.dict)
File "C:\Users\HP\OneDrive\Desktop\AutoML\app.py", line 5, in
import pandas_profiling
File "C:\Users\HP\AppData\Local\Programs\Python\Python311\Lib\site-packages\pandas_profiling_init.py", line 8, in
from ydata_profiling.compare_reports import compare
File "C:\Users\HP\AppData\Local\Programs\Python\Python311\Lib\site-packages\ydata_profiling_init_.py", line 7, in
from ydata_profiling.compare_reports import compare
File "C:\Users\HP\AppData\Local\Programs\Python\Python311\Lib\site-packages\ydata_profiling\compare_reports.py", line 9, in
from ydata_profiling.config import Correlation, Settings
File "C:\Users\HP\AppData\Local\Programs\Python\Python311\Lib\site-packages\ydata_profiling\config.py", line 7, in
from pydantic import BaseModel, BaseSettings, Field, PrivateAttr
File "C:\Users\HP\AppData\Local\Programs\Python\Python311\Lib\site-packages\pydantic_init_.py", line 218, in getattr
return _getattr_migration(attr_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\HP\AppData\Local\Programs\Python\Python311\Lib\site-packages\pydantic_migration.py", line 294, in wrapper
raise PydanticImportError(
报错原因
Pydantic 2.x版本把BaseSettings从主包移到了独立的pydantic-settings包,但你当前安装的ydata-profiling(pandas-profiling是它的旧名称)版本还在从pydantic主包导入BaseSettings,版本不兼容导致报错。
解决方法
方法1:安装兼容的Pydantic 1.x版本
如果不想升级ydata-profiling,可以回退到Pydantic 1.x版本,这个版本的BaseSettings仍在主包内:
pip install pydantic==1.10.12
方法2:升级ydata-profiling到适配Pydantic 2.x的版本
安装最新版的ydata-profiling,新版已经修复了这个导入问题:
pip install --upgrade ydata-profiling
方法3:临时兼容方案(不推荐长期使用)
如果上述两种方法暂时无法执行,可以先安装pydantic-settings包,再在代码开头添加兼容补丁:
首先安装包:
pip install pydantic-settings
然后在代码最开头添加:
try: from pydantic import BaseSettings except ImportError: from pydantic_settings import BaseSettings import pydantic pydantic.BaseSettings = BaseSettings
内容的提问来源于stack exchange,提问作者Unreal Capacity

