【Python笔记】源码编译安装Python时,如何支持自定义安装的高版本openssl库

本文记录了在老旧操作系统上,因openssl版本低导致安装Scrapy困难的问题,以及如何通过源码编译安装Python并支持自定义的高版本openssl库。在编译过程中,验证了Python是否正确支持openssl,并分析了在安装cryptography库时遇到的ssl证书错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近有个小需求想使用Scrapy库做抓取,但公司开发机操作系统版本老旧,导致系统默认的openssl库版本也很低(OpenSSL 0.9.7a Feb 19 2003),最终导致安装Scrapy非常麻烦。趁着元旦假期,决定用自己安装好的高版本openssl库作为依赖,重新编译安装开发机的Python环境。

安装及其后使用中遇到一些关于openssl的问题,或许对自己后续工作或别人有参考价值,作为笔记,记录于此。

源码编译安装流程如下:

1. Python官网下载源码包(version 2.7.8)并解压

2. 通过configure配置Makefile参数
假定先前已在/home/slvher/tools/openssl-1.0.1j路径下成功安装好高版本openssl,那么,可以通过下面的环境变量来设置gcc的编译/链接参数:
export LDFLAGS="-lssl -lcrypto -Wl,-rpath=/home/slvher/tools/openssl-1.0.1j/lib/"
export CPPFLAGS="-I/home/slvher/tools/openssl-1.0.1j/include"
然后运行configure工具:
./configure --prefix=/home/slvher/tools/Python-2.7.8 
configure运行完后,会生成Makefile,check无误后,执行make && make install就能完成Python安装。

3. 验证Python支持的ssl版本
Python安装成功且其bin路径加入PATH环境变量后,可通过下面的命令来验证是否正确支持高版本的openssl库:

python -c "import ssl; print ssl.OPENSSL_VERSION"
例如我机器上的输出结果如下:
OpenSSL 1.0.1j 15 Oct 2014

4. 后续使用依赖openssl的包时,可能遇到的问题及解决思路
在依赖了高版本openssl库(普通用户自定义安装在非系统标准路径下)的Python环境下,通过easy_install或pip安装Python第三方包时,可能会报类似于下面的错误(以pip安装Scrapy为例):
此处省略上文...
[Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed -- Some packages may not be found!
此处省略下文...
受StackOverflow这篇帖子 python easy_install fails with SSL certificate error for all packages的启发,结合pip的安装日志(本文最后会贴出报错日志),最终确定报错的原因是由于安装过程中setuptools会
<think>好的,我现在需要解决用户在Mac M4芯片上使用Python pip下载遇到的SSL证书验证失败的问题。首先,我需要回忆一下常见的SSL证书问题及其解决方法。根据用户提供的引用信息,特别是引用[1]和[2],问题可能涉及到openssl版本过旧或者Python本身没有正确配置SSL模块。 首先,用户的环境是Mac M4芯片,也就是基于ARM架构的。这可能意味着某些安装步骤需要特别注意兼容性。根据引用[1],在Linux中升级openssl和重新安装Python3可以解决类似问题,那么在Mac上可能需要类似的操作,但具体步骤可能不同。 接下来,用户的问题是在使用pip安装遇到SSL证书验证失败。根据引用[2],pip需要SSL/TLS支持,如果Python编译时没有正确链接到系统的SSL,就会导致这个问题。因此,可能需要检查Python安装是否支持SSL,并确保openssl版本足够新。 可能的解决方案步骤包括: 1. 更新系统自带的openssl或者通过Homebrew安装最新版本。 2. 重新安装Python,确保在编译时正确链接到新的openssl。 3. 更新pip和setuptools到最新版本。 4. 信任证书路径或手动指定证书路径。 5. 使用临绕过SSL验证的方法(虽然不推荐,但作为临解决方案)。 另外,用户提到Mac M4芯片,可能需要确认Python是否针对ARM架构正确编译,以及是否存在兼容性问题。例如,引用[3]中提到的安装Torch使用特定索引URL,可能需要用户确保网络配置正确,或者是否存在代理问题导致SSL验证失败。 需要验证的步骤包括: - 检查openssl版本:运行`openssl version`查看当前版本,如果过旧,可能需要升级。 - 检查Python的SSL模块是否正常:在Python中运行`import ssl; print(ssl.OPENSSL_VERSION)`,确认其使用的openssl版本是否为最新。 - 如果是通过Homebrew安装Python,可能需要重新链接openssl。 - 确保pip的证书路径正确,或者设置REQUESTS_CA_BUNDLE环境变量指向正确的证书文件。 可能还需要用户提供具体的错误信息,以便更精确地诊断问题,例如错误日志中是否提示证书路径问题或SSL协议不匹配等。 总结下来,解决步骤可能包括升级openssl,重新安装Python以链接正确的SSL,更新pip,设置证书路径,或临禁用SSL验证作为最后手段。</think>针对Mac M4芯片上Python因SSL证书问题导致的下载失败,以下是分步解决方案: --- ### 一、检查Python的SSL支持 1. 在终端输入以下命令验证Python的SSL模块状态: ```python python3 -c "import ssl; print(ssl.OPENSSL_VERSION)" ``` - 如果输出类似`OpenSSL 1.1.1`且版本较低,需升级openssl[^1]。 - 若报错`No module named '_ssl'`,说明Python未正确编译SSL支持。 --- ### 二、升级openssl 1. 通过**Homebrew**安装最新openssl: ```bash brew update brew install openssl ``` 2. 将openssl路径添加到环境变量(针对zsh): ```bash echo 'export PATH="/opt/homebrew/opt/openssl@3/bin:$PATH"' >> ~/.zshrc source ~/.zshrc ``` --- ### 三、重新编译安装Python并链接新openssl 1. 使用Homebrew重装Python(推荐): ```bash brew reinstall python@3.11 ``` Homebrew会自动链接最新openssl。 2. **手动编译安装**(若需定制): ```bash # 下载Python源码 wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz tar xzf Python-3.11.9.tgz cd Python-3.11.9 # 配置指定openssl路径 ./configure --with-openssl=$(brew --prefix openssl@3) make -j8 sudo make install ``` --- ### 四、更新pip与信任证书 1. 更新pip和setuptools: ```bash python3 -m pip install --upgrade pip setuptools ``` 2. 临绕过SSL验证(仅紧急情况): ```bash pip3 install --trusted-host pypi.org --trusted-host files.pythonhosted.org 包名 ``` **注意**:长期使用需修复证书路径而非禁用验证[^2]。 --- ### 五、配置证书路径 1. 手动下载证书文件: ```bash curl -O https://curl.se/ca/cacert.pem ``` 2. 设置环境变量指向证书: ```bash export SSL_CERT_FILE=/path/to/cacert.pem # 或 export REQUESTS_CA_BUNDLE=/path/to/cacert.pem ``` 将命令添加到`~/.zshrc`永久生效。 --- ### 六、验证解决效果 1. 尝试安装: ```bash pip3 install requests # 选择一个常用测试 ``` 2. 检查是否仍有`SSLError`或`CERTIFICATE_VERIFY_FAILED`错误。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值