Python 3.4.4安装pip报错SSL/TLS问题的解决方案
针对Python 3.4.4在安装pip时遭遇的SSL/TLS协议版本(TLSV1_ALERT_PROTOCOL_VERSION)错误,系统分析PyPI服务端TLS 1.2强制升级与旧版解释器加密套件脱节的根本成因,并提供专用旧版引导脚本与离线Wheel包分发两种切实可行的解决路径。
get-pip.py 脚本,或直接通过离线下载的 pip-19.1.1 和 setuptools-43.0.0 对应的 Wheel 文件完成手动本地注入。
一、问题现象与具体报错特征
Python 3.4.4 作为官方支持 Windows XP 等老旧系统的最后一个发行版本,在维护遗留设备、测试兼容环境或工控机维护中仍被部分系统使用。然而,当使用者尝试在已安装的 Python 3.4.4 环境中通过标准脚本(如常规 get-pip.py)或内置 ensurepip 初始化包管理工具时,控制台通常会直接中断并抛出严重的 SSL/TLS 握手异常。
典型的错误日志如下所示:
Collecting pip
Downloading https://files.pythonhosted.org/packages/...
ssl.SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)
During handling of the above exception, another exception occurred:
urllib.error.URLError: <urlopen error [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590)>
部分用户在尝试执行 python -m ensurepip 时,也可能伴随证书校验失败(CERTIFICATE_VERIFY_FAILED)或报出找不到分发资源的错误。此问题的关键在于,任何试图直接访问 pypi.org 或 pythonhosted.org 的网络行为均在 TLS 握手阶段被服务端主动重置,导致网络层面的下载根本无法进行。
二、核心根因深度剖析
出现该报错的本质并非网络波动,也不是 Python 损坏,而是加密协议标准演进与历史运行时之间的代际脱节:
- PyPI 强制下线旧版 TLS 协议:2018 年 4 月,Python 官方包索引(PyPI)为了满足现代互联网安全合规要求,全面禁用了安全性薄弱的 TLS 1.0 和 TLS 1.1 协议,强制要求所有接入客户端必须使用 TLS 1.2 或更高版本。
- Python 3.4.4 内置底层加密库滞后:Windows 平台上的 Python 3.4.4 编译于 2015 年底,其内部自带的
_ssl.pyd模块基于 OpenSSL 1.0.1 早期补丁版本。在未打系统补丁的旧平台(如 Windows 7 早期版或 Windows XP)上,该模块默认发起的 TLS 握手请求最高仅支持到 TLS 1.0/1.1,从而被 PyPI 服务器直接阻断,抛出TLSV1_ALERT_PROTOCOL_VERSION。 - 现代 get-pip.py 语法弃用:若直接从官方主入口(
bootstrap.pypa.io/get-pip.py)获取最新安装脚本,最新脚本使用了 Python 3.6+ 的新语法特性,在 Python 3.4 解释器下运行会直接抛出SyntaxError。
三、排查思路与修复方案判定
处理该问题时,首要任务是明确当前系统的网络及依赖环境。不同系统状态对应不同的处理策略:
四、方案一:使用专有归档引导脚本安装(推荐在线途径)
官方为已终止支持的旧版 Python 保留了历史专有 get-pip.py 脚本镜像,其中针对 Python 3.4 的专有脚本已被锁定在 pip 19.1.1 版本,且其内部做了向下兼容处理。
1. 获取 Python 3.4 专用引导脚本
请勿直接访问常规地址,必须使用包含了版本路径的专门链接:
官方归档专有地址:
https://bootstrap.pypa.io/pip/3.4/get-pip.py
curl 或旧脚本拉取上述地址,建议在能够正常进行现代 HTTPS 访问的浏览器(如 Chrome、Firefox、Edge)中直接打开上述链接,按 Ctrl + S 将网页完整保存为 get-pip.py,然后将其移动至 Python 3.4.4 所在的目标机器目录。
2. 执行引导安装
将下载得到的 get-pip.py 放置在固定目录(如 C:\Python34\),打开 Windows 命令提示符(CMD),切换到该目录下执行:
cd C:\Python34
python get-pip.py --no-setuptools --no-wheel
参数说明:
--no-setuptools和--no-wheel:在网络受限或 TLS 存在部分协商缺陷的环境中,阻止脚本尝试向 PyPI 联网拉取额外的 setuptools 包,从而规避二级网络调用导致的 SSL 崩溃。- 若网络环境下包含支持 TLS 1.2 的前置代理或中间透明代理,可省略这两个参数直接安装全套基础工具。
五、方案二:完全离线 Wheel 包注入安装(彻底脱网方案)
如果目标机器处于完全隔离的内网、或者操作系统底层缺少 TLS 1.2 的补丁支持,最稳妥、最确定的方法是直接通过离线文件注入。Python 3.4 最高支持的包管理工具版本为 pip 19.1.1 与 setuptools 43.0.0。
1. 下载所需的离线包
在能够正常上网的计算机上,访问 PyPI 官方包归档或镜像站,下载以下两个文件:
pip-19.1.1-py2.py3-none-any.whlsetuptools-43.0.0-py2.py3-none-any.whl
2. 解压并置入 site-packages
.whl 文件的内部结构采用标准 ZIP 格式组织:
- 将
pip-19.1.1-py2.py3-none-any.whl的后缀名修改为.zip。 - 使用解压软件打开,将其内部的
pip和pip-19.1.1.dist-info两个文件夹解压出来。 - 将这两个文件夹复制到 Python 3.4.4 的库目录中,默认 Windows 路径通常为:
C:\Python34\Lib\site-packages\。 - 对
setuptools-43.0.0-py2.py3-none-any.whl执行同样的操作,将解压后的setuptools目录也放入该路径。
3. 自举注册与生成控制台执行程序
完成文件夹复制后,Python 已经具备了 import pip 的能力,但此时 C:\Python34\Scripts\ 目录下尚未生成 pip.exe。我们需要使用刚刚注入的 pip 模块自我注册一次:
cd C:\Python34
python -m pip install --no-index --find-links=. pip-19.1.1-py2.py3-none-any.whl setuptools-43.0.0-py2.py3-none-any.whl
命令执行完成后,系统会在 Scripts 目录下正式生成 pip.exe、pip3.exe 和 pip3.4.exe。
六、安装结果验证与源配置
安装完成后,需要验证安装是否成功,并对后续的包安装策略进行必要的配置。
1. 验证版本状态
在终端中执行以下验证命令:
python -m pip --version
正确输出示例:
pip 19.1.1 from C:\Python34\lib\site-packages\pip (python 3.4)
2. 后续包安装配置:配置信任主机与镜像源
由于 Python 3.4.4 本身的底层 SSL 库依然无法直接握手现代高版本 TLS,后续直接运行 pip install package_name 仍可能再次触发 SSL 协议错误。解决方案有两种:
方法 A:使用支持低版本 TLS 或 HTTP 协议的镜像源,配合信任主机参数
pip install requests==2.21.0 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
通过使用 http:// 配合 --trusted-host,可以彻底跳过客户端的 TLS 握手层,确保包的平稳拉取。
方法 B:全局持久化配置
在 Windows 用户目录(如 C:\Users\Administrator\pip\pip.ini)创建或修改配置文件:
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
disable-pip-version-check = true
七、注意事项与避坑指南
pip install --upgrade pip:现代 pip 会尝试自动拉取最新发布的版本(如 20.x 或更高)。这些版本已经完全放弃了对 Python 3.4 的语法兼容,一旦触发升级,不仅无法完成更新,反而会破坏现有已经就绪的 pip 入口,导致出现
SyntaxError 并彻底瘫痪命令行。
日常使用中还需注意以下两点:
- 三方库版本上限匹配:不仅 pip 本身需要固定版本,在安装常用库时也需注意版本限制。例如,
requests应锁定在2.21.0及以下,cryptography应避免拉取需要 Rust 工具链的现代版。 - 系统补丁层面评估:如果运行在 Windows 7 上,建议为系统安装代号为
KB3140245的补丁并开启系统级的 TLS 1.2 选项;若运行在 Windows XP 上,由于系统底层 SChannel 永远无法支持 TLS 1.2,请严格遵循本文所阐述的 HTTP 信任镜像源或纯离线安装流程。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









