Mac通过pip安装PycURL报错'openssl/crypto.h'文件未找到如何解决
macOS 10.15 Catalina 安装pycurl报openssl头文件缺失解决方法
你之前的操作没生效,核心是两个问题:一是pycurl 7.43.0版本对openssl@3兼容性存在已知缺陷,二是编译时没有强制指定Homebrew安装的curl路径,默认调用了系统自带的、绑定LibreSSL的curl-config,导致头文件搜索路径错位,手动建软链接、强制link openssl的操作反而会打乱系统库的优先级。
按以下步骤操作即可解决:
- 先清理之前手动创建的无效软链接和配置,避免冲突
rm -f /usr/local/lib/libcrypto.3.dylib rm -f /usr/local/lib/libssl.3.dylib rm -f /usr/local/bin/openssl brew unlink openssl 2>/dev/null pip uninstall -y pycurl
- 安装兼容版本的依赖
不要用openssl@3,直接装适配pycurl 7.43.0的openssl@1.1,同时安装Homebrew版curl,替换系统自带的绑定LibreSSL的curl版本:
brew update brew install openssl@1.1 curl
- 临时指定编译阶段的环境变量,确保clang能找到正确的头文件和库路径
export PYCURL_SSL_LIBRARY=openssl export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib -L/usr/local/opt/curl/lib" export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include -I/usr/local/opt/curl/include" export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig:/usr/local/opt/curl/lib/pkgconfig"
- 单独编译安装pycurl,跳过缓存强制指定openssl路径
pip install --no-cache-dir pycurl --install-option="--with-openssl" --install-option="--openssl-dir=/usr/local/opt/openssl@1.1"
单独安装pycurl成功后,再正常执行pip install -r requirements.txt安装剩余依赖即可,不会再出现openssl/crypto.h、openssl/ssl.h找不到的报错。
避坑说明
- 不要给Homebrew安装的openssl执行
brew link --force,macOS的SIP机制会阻止系统级路径下的第三方openssl头文件被clang正常加载,强制链接反而会引发更多路径冲突 - 不需要额外在requirements.txt里加cryptography依赖,pycurl编译过程完全不依赖这个包,加了也解决不了头文件缺失的问题
- 如果执行上述步骤还是报编译错误,先运行
xcode-select --install重新安装完整的Xcode命令行工具,避免clang组件缺失导致的编译异常
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

