WSL环境下执行airflow db init时Pydantic报错求助
Apache Airflow WSL安装时
airflow db init报错解决 在WSL环境安装Apache Airflow,执行airflow db init命令时触发以下错误:
DB: sqlite:////mnt/c/Users/baron/Documents/airflow/airflow.db /home/darius/airflow_env/lib/python3.10/site-packages/pydantic/_internal/_config.py:257 UserWarning: Valid config keys have changed in V2: * 'orm_mode' has been renamed to 'from_attributes' Traceback (most recent call last): File "/home/darius/airflow_env/bin/airflow", line 8, in <module> sys.exit(main()) File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/__main__.py", line 48, in main args.func(args) File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/cli/cli_config.py", line 52, in command return func(*args, **kwargs) File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/cli/commands/db_command.py", line 37, in initdb db.initdb() File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/utils/session.py", line 76, in wrapper return func(*args, session=session, **kwargs) File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/utils/db.py", line 711, in initdb import_all_models() File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/models/__init__.py", line 60, in import_all_models __getattr__(name) File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/models/__init__.py", line 78, in __getattr__ val = import_string(f"{path}.{name}") File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/utils/module_loading.py", line 36, in import_string module = import_module(module_path) File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/models/skipmixin.py", line 25, in <module> from airflow.serialization.pydantic.dag_run import DagRunPydantic File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/serialization/pydantic/dag_run.py", line 24, in <module> from airflow.serialization.pydantic.dataset import DatasetEventPydantic File "/home/darius/airflow_env/lib/python3.10/site-packages/airflow/serialization/pydantic/dataset.py", line 40, in <module> class TaskOutletDatasetReferencePydantic(BaseModelPydantic): File "/home/darius/airflow_env/lib/python3.10/site-packages/pydantic/_internal/_model_construction.py", line 95, in __new__ private_attributes = inspect_namespace( File "/home/darius/airflow_env/lib/python3.10/site-packages/pydantic/_internal/_model_construction.py", line 328, in inspect_namespace raise PydanticUserError( pydantic.errors.PydanticUserError: A non-annotated attribute was detected: `task_id = <class 'str'>`. All model fields require a type annotation; if `task_id` is not meant to be a field, you may be able to resolve this error by annotating it as a `ClassVar` or updating `model_config['ignored_types']`.
错误原因
核心问题是Airflow版本与Pydantic V2不兼容:
- Pydantic V2强制要求所有模型字段必须添加类型注解,而当前使用的Airflow版本代码未适配该规则
- 前置警告提示
orm_mode已改名为from_attributes,也佐证了Pydantic版本升级后Airflow代码未同步更新
解决步骤
- 降级Pydantic到V1兼容版本,执行以下命令:
pip install pydantic==1.10.12 - 重新运行
airflow db init - 若问题仍存在,建议安装与Pydantic V1兼容的Airflow版本(如Airflow 2.6.x及以下版本)
内容的提问来源于stack exchange,提问作者Bara134
相关产品推荐
相关产品推荐

