MacOS Mojave环境下安装Apache Airflow 2.6.3失败:编译google-re2时出现大量报错
我之前在MacOS Mojave环境里装Airflow的时候也碰到过几乎一模一样的问题,核心原因就是系统默认的编译工具没有启用C++11标准,再加上手动安装的pybind11和Airflow约束文件指定的版本不兼容,导致google-re2编译失败。给你几个亲测有效的解决步骤:
第一步:更新Xcode Command Line Tools
Mojave自带的编译工具链版本偏老,对C++11的支持不够完善,先执行命令更新:xcode-select --install如果已经安装过,系统会提示你,这一步能解决很多旧工具带来的编译兼容性问题。
第二步:设置编译环境变量,强制启用C++11标准
google-re2的源码编译必须依赖C++11及以上标准,但Mojave的clang(系统显示的gcc其实是clang的伪装)默认不会自动开启这个标准。我们需要设置环境变量让pip编译时带上参数:export CXXFLAGS="-std=c++11" export CFLAGS="-std=c++11"要是你用zsh,把这两行追加到
~/.zshrc里;用bash的话就加到~/.bash_profile,这样每次打开终端都会自动生效,不用每次都手动输入。第三步:卸载手动安装的pybind11,改用Airflow约束文件指定的版本
你之前手动安装的pybind11版本大概率和Airflow约束文件里要求的不匹配,这会导致编译时的冲突。先卸载掉手动装的版本:pip uninstall -y pybind11然后重新运行Airflow的安装命令(注意你原来的命令里多了一个单引号,要去掉):
pip install apache-airflow==2.6.3 \ --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.6.3/constraints-3.8.txt"如果上述步骤还是不行,单独编译安装google-re2
先单独处理google-re2的安装,强制用指定的编译参数:pip install google-re2 --no-binary :all: --install-option="--cxxflags=-std=c++11"等google-re2安装成功后,再重新执行Airflow的安装命令即可。
另外提醒一下,Mojave是比较老的系统了,Python3.8虽然在支持范围内,但部分依赖的编译确实需要手动干预,确保你的虚拟环境是干净的,没有其他无关依赖干扰。
备注:内容来源于stack exchange,提问作者Ryan

