标题: 解决 Python pip 安装时遇到的“非受信任或安全主机”警告
一、问题背景
在使用 Python 的 pip 包管理器安装或更新库时,有时会遇到这样的警告信息:
代码语言:javascript复制WARNING: The repository located at mirrors.aliyun.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '-trusted-host mirrors.aliyun.com'.
这个警告意味着 pip 试图从一个非 HTTPS 的源(在这个例子中是 mirrors.aliyun.com)安装软件包,但出于安全考虑,pip 默认只信任 HTTPS 源。这是因为 HTTP 通信在传输过程中可能被中间人攻击(MITM),导致软件包被篡改或拦截。
二、可能出错的原因
- 使用了错误的源地址,即该地址没有提供 HTTPS 服务。
- 本地 pip.conf 或环境变量中配置了非 HTTPS 的源。
- 暂时性的网络问题导致 HTTPS 连接失败,pip 回退到 HTTP。
三、错误代码示例
假设你在 pip.conf 或直接在命令行中使用了非 HTTPS 的源,如下:
代码语言:javascript复制pip install -i http://mirrors.aliyun.com/pypi/simple/ some-package
或者,在 pip.conf 文件中可能有类似下面的配置:
代码语言:javascript复制[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
四、正确代码示例(结合实战场景)
- 使用 HTTPS 源
首先,尝试找到该源的 HTTPS 版本。对于阿里云镜像,通常 HTTPS 地址是 https://mirrors.aliyun.com/pypi/simple/。修改命令行或 pip.conf 文件中的源地址。
命令行示例:
代码语言:javascript复制pip install -i https://mirrors.aliyun.com/pypi/simple/ some-package
pip.conf 文件示例(通常在用户家目录下的 .pip/pip.conf 或系统级的 /etc/pip.conf):
代码语言:javascript复制[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
注意,在 pip.conf 中还添加了 trusted-host,这是为了明确告诉 pip 信任这个特定的主机,即使它不是默认的受信任 HTTPS 主机。
- 临时允许非 HTTPS 源(不推荐)
如果你确定要忽略这个警告并继续使用非 HTTPS 源(这通常不推荐,除非你完全信任该源),你可以在命令行中添加 -trusted-host 参数:
代码语言:javascript复制pip install -i http://mirrors.aliyun.com/pypi/simple/ some-package --trusted-host mirrors.aliyun.com
五、注意事项
- 始终优先使用 HTTPS 源来安装 Python 包,以保证软件包的完整性和安全性。
- 如果你管理的是团队或组织的环境,确保所有成员都了解并使用安全的源。
- 定期检查并更新你的 pip.conf 文件或命令行参数,以确保它们指向正确的源。
- 如果你在使用企业内部的私有仓库,确保它支持 HTTPS 并配置了正确的证书。