pip のアップグレードで発生する SyntaxError の解決方法
問題の概要
CentOS 7 などの古い環境で Python 2.7 を使用している場合、pip install --upgrade pip
を実行すると次のようなエラーが発生することがあります:
File "/usr/lib/python2.7/site-packages/pip/_internal/cli/main.py", line 60
sys.stderr.write(f"ERROR: {exc}")
^
SyntaxError: invalid syntax
このエラーは、pip 21.0 以降が Python 2.7 のサポートを終了したために発生します。Python 2.7 は f-string(フォーマット済み文字列リテラル)をサポートしていないため、新しいバージョンの pip が正常に動作しないのです。
根本原因
Python 2.7 は2020年1月1日で公式サポートが終了しました。これに伴い、pip 開発チームも2021年1月にリリースされた pip 21.0 で Python 2.7 のサポートを終了しました。
Python 2.7 のサポート終了
pip 20.3 が Python 2.7 をサポートする最後のバージョンです。これ以降のバージョンでは、Python 2.7 環境で実行すると構文エラーが発生します。
解決方法
方法1: pip をサポートされているバージョンにダウングレード
現在の pip をアンインストールし、サポートされているバージョンを再インストールします:
# CentOS/RHEL の場合
yum remove python2-pip
yum install python2-pip -y
pip install --upgrade "pip<21.0"
# Ubuntu/Debian の場合
sudo apt-get remove --purge python-pip
sudo apt-get autoremove
sudo easy_install pip==20.3.4
方法2: get-pip.py を使用したインストール
Python 2.7 用の pip を公式スクリプトでインストールします:
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python get-pip.py
方法3: 仮想環境の使用(推奨)
Python 2.7 プロジェクトには仮想環境の使用を推奨します:
# virtualenv のインストール
pip install virtualenv
# Python 2.7 用仮想環境の作成
virtualenv --python=python2 myenv
# 仮想環境の有効化
source myenv/bin/activate
# 仮想環境内で pip をインストール
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python get-pip.py
予防策
pip の自動アップグレードを防ぐには:
# pip の自動アップグレードを無効化
pip install --upgrade "pip<21.0" --no-cache-dir
CI/CD 環境では、Python バージョンに基づいて条件分岐するスクリプトが有効です:
use_pip_lt_21=`python -c "import sys; print(sys.version_info[:2] < (3, 6))"`
if [ $use_pip_lt_21 = "True" ]; then
pip="pip < 21.0"
else
pip="pip"
fi
pip install --disable-pip-version-check --upgrade "$pip"
トラブルシューティング
pip が完全に壊れてしまった場合の修復方法:
# すべての pip 関連ファイルを削除
sudo rm -f /usr/local/bin/pip
sudo rm -f /usr/local/bin/pip2
sudo rm -fr ~/.local/lib/python2.7/site-packages/pip*
sudo rm -rf ~/.cache/pip/
# 再インストール
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py | sudo python
まとめ
Python 2.7 環境で pip を使用する場合は、以下の点に注意してください:
- pip 21.0 以降はインストールしない
- サポートされている最後のバージョンは pip 20.3.4
- 可能であれば仮想環境を使用する
- 本番環境ではバージョンを明示的に固定する
重要
Python 2.7 はセキュリティアップデートを受けておらず、重大な脆弱性が存在する可能性があります。可能な限り Python 3.x への移行を検討してください。
以上の解決策により、Python 2.7 環境でも pip を問題なく使用できるようになります。ただし、長期的には Python 3 への移行計画を立てることを強く推奨します。