如何解決 Linux 實例 pip 操作時的超時問題
pip 是當前最流行的 Python 安裝包管理工具之一,很多阿里云用戶會通過 pip 更新系統源。阿里云的 pip 源地址有以下三處:
(默認)公網:mirrors.aliyun.com
專有網絡 VPC 內網:mirrors.cloud.aliyuncs.com
經典網絡內網:mirrors.aliyuncs.com
現象描述
Linux 實例的 pip 請求偶有超時或者失敗現象。目前,受影響的公共鏡像有:
CentOS
Debian
Ubuntu
SUSE
OpenSUSE
Aliyun Linux
原因分析
pip 請求的默認訪問地址為 mirrors.aliyun.com,要求訪問該地址的實例能訪問公網。當您的實例沒有分配公網 IP 時,會出現 pip 請求超時故障。
解決方法
您可以使用以下方法中的任意一種解決問題。
方法一
為您的實例分配公網 IP,即為實例綁定一個 彈性公網 IP(EIP)。預付費實例還可以通過 升降配 重新分配公網 IP。
方法二
一旦出現 pip 響應延遲,您可以在 ECS 實例中運行腳本 fix_pypi.sh,然后再重試 pip 操作。
遠程連接實例。
運行 wget http://image-offline.oss-cn-hangzhou.aliyuncs.com/fix/fix_pypi.sh 獲取文件。
運行腳本:
VPC 實例:運行 bash fix_pypi.sh "mirrors.cloud.aliyuncs.com"。
經典網絡實例:運行 bash fix_pypi.sh "mirrors.aliyuncs.com"。
重試 pip 操作。
以下為 fix_pypi.sh 的腳本內容:
#!/bin/bash
function config_pip() {
pypi_source=$1
if [[ ! -f ~/.pydistutils.cfg ]]; then
cat > ~/.pydistutils.cfg << EOF
[easy_install]
index-url=http://$pypi_source/pypi/simple/
EOF
else
sed -i "s#index-url.*#index-url=http://$pypi_source/pypi/simple/#" ~/.pydistutils.cfg
fi
if [[ ! -f ~/.pip/pip.conf ]]; then
mkdir -p ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
index-url=http://$pypi_source/pypi/simple/
[install]
trusted-host=$pypi_source
EOF
else
sed -i "s#index-url.*#index-url=http://$pypi_source/pypi/simple/#" ~/.pip/pip.conf
sed -i "s#trusted-host.*#trusted-host=$pypi_source#" ~/.pip/pip.conf
fi
}
config_pip $1
以上就是本篇文章的全部內容知識點,感謝大家對腳本之家的支持。