使用Pip安装Python库Boto3失败:网络不可达问题求助
解决EC2实例安装Boto3时的[Errno 101] Network is unreachable问题
我之前在EC2上部署Python环境时也碰到过一模一样的问题,其实这个网络不可达的报错,本质是哪怕你用的是本地的Boto3安装包,pip在安装过程中还是会自动去PyPI拉取Boto3的依赖组件(比如核心依赖botocore),而你的EC2实例目前没办法连通PyPI的服务器。下面是我整理的排查和解决步骤:
第一步:排查EC2的网络基础配置
先确认EC2实例的网络通路是否正常,这是问题的核心:
- 检查安全组出站规则:确保你的EC2实例所属的安全组允许**HTTPS(443端口)**的出站流量,目标可以设为
0.0.0.0/0(无特殊限制的话),或者PyPI官方的IP段。 - 检查NACL(网络访问控制列表):如果实例在VPC私有子网中,NACL的出站规则也要允许443端口的流量通过,避免拒绝规则优先拦截。
- 确认实例的公网访问能力:
- 公有子网实例:检查是否分配了弹性公网IP(EIP),或者子网配置里的「自动分配公网IP」是否开启。
- 私有子网实例:必须确保VPC配置了NAT网关,且子网路由表已将
0.0.0.0/0的流量指向NAT网关,这样实例才能通过NAT访问公网。
- 测试连通性:在EC2实例上执行以下命令,验证能否访问PyPI:
如果返回正常的HTML内容,说明网络通路没问题;如果还是报错,继续排查网络配置。curl https://pypi.org/simple/botocore/
第二步:解决安装问题的两种方案
方案一:修复网络后正常安装
如果排查后修复了网络问题,直接用本地包安装即可,pip会自动拉取所需依赖:
# 安装tar.gz包 python -v -m pip install ./boto3-1.13.5.tar.gz # 或者安装whl包 python -v -m pip install ./boto3-1.9.149-py2.py3-none-any.whl
如果默认PyPI源访问慢,也可以指定官方镜像源:
python -m pip install --index-url https://pypi.org/simple/ ./boto3-1.13.5.tar.gz
方案二:离线安装所有依赖(完全无需网络)
如果你的EC2实例确实无法连接公网,可采用离线安装的方式:
- 在有网络的本地机器/服务器上,下载Boto3指定版本及所有依赖包:
# 下载1.13.5版本的所有依赖 pip download boto3==1.13.5 --dest ./boto3-packages # 或者下载1.9.149版本 pip download boto3==1.9.149 --dest ./boto3-packages - 将下载好的包目录传到EC2实例(以scp为例,替换为你的密钥和实例信息):
scp -i your-key-pair.pem -r ./boto3-packages ec2-user@your-ec2-ip:/home/ec2-user/ - 在EC2实例上执行离线安装命令,完全从本地目录读取依赖:
python -m pip install --no-index --find-links ./boto3-packages boto3==1.13.5
第三步:验证安装成功
安装完成后,进入Python交互模式验证:
python
输入import boto3,如果没有返回ModuleNotFoundError,就说明安装成功了。
内容的提问来源于stack exchange,提问作者Chandler Cree
相关产品推荐
相关产品推荐

