无Root权限下Airflow initdb失败:ImportError: No module named log.logging_mixin
解决Airflow 1.7.0初始化时
ImportError: No module named log.logging_mixin的问题 这个报错大概率是因为你安装Airflow时,pip自动卸载了与Airflow 1.7.0兼容的旧版本依赖(Flask-WTF 0.12和future 0.15.2),替换成了不兼容的新版本,导致Airflow内部模块的导入路径被破坏。下面是一步步的解决办法:
1. 确认当前依赖版本问题
首先检查一下现在安装的future和Flask-WTF版本,验证是否和Airflow 1.7.0不兼容:
pip list | grep -E "future|Flask-WTF"
Airflow 1.7.0是比较老旧的版本,它对这两个包的版本要求很严格——之前被卸载的future==0.15.2和Flask-WTF==0.12其实是它的兼容版本,新版本反而会导致导入错误。
2. 安装回兼容的依赖版本
因为你没有Root权限,安装时要指定到你有权限的/apps/dist/目录:
pip install --install-option="--prefix=/apps/dist/" future==0.15.2 Flask-WTF==0.12
3. 确保Python能找到正确的依赖
检查你的PYTHONPATH环境变量是否包含/apps/dist/下的site-packages目录,不然Python可能还是找不到刚装的兼容包:
echo $PYTHONPATH
如果没看到相关路径,临时添加(要是想永久生效,就把这行加到你的~/.bashrc或~/.zshrc里):
# 替换pythonX.X为你实际的Python版本,比如python2.7 export PYTHONPATH=/apps/dist/lib/pythonX.X/site-packages:$PYTHONPATH
4. 重新尝试初始化数据库
现在再执行初始化命令,应该就能正常运行了:
airflow initdb
额外推荐:用虚拟环境彻底隔离依赖
考虑到你没有Root权限,用virtualenv创建独立的虚拟环境是更稳妥的方案,能彻底避免系统包和你的Airflow依赖冲突:
# 先把virtualenv装到你的目录 pip install --install-option="--prefix=/apps/dist/" virtualenv # 创建Airflow专属的虚拟环境 /apps/dist/bin/virtualenv /apps/dist/airflow_env # 激活虚拟环境 source /apps/dist/airflow_env/bin/activate # 在虚拟环境里重新安装Airflow 1.7.0,依赖会自动适配兼容版本 pip install apache-airflow==1.7.0 # 执行初始化 airflow initdb
这样操作后,依赖都被隔离在虚拟环境里,后续也不会再出现类似的版本冲突问题。
内容的提问来源于stack exchange,提问作者Greg Dougherty
相关产品推荐
相关产品推荐

