| この記事の要点 |
|
エラー内容
File "/usr/bin/yum", line 30
except KeyboardInterrupt, e:
^
SyntaxError: invalid syntax
発生条件
yum コマンドを実行した際に発生するエラーです。/usr/bin 直下にある python のシンボリックリンクを 2.x 系から 3.x 系に変更すると発生します。典型的には、Python 3 をインストールしたあとに「python と打ったら Python 3 が動くようにしたい」と考えて、次のような操作をした場合です。
# これが原因になる操作
sudo ln -sf /usr/bin/python3 /usr/bin/python
原因:yum は Python 2 で書かれている
CentOS 7(RHEL 7 系)の yum は Python で書かれたスクリプトで、1 行目(shebang)が #!/usr/bin/python になっています。つまり、/usr/bin/python が指している Python で実行されます。
エラーになった 30 行目の except KeyboardInterrupt, e: は Python 2 の例外の書き方で、Python 3 では except KeyboardInterrupt as e: と書かなければ文法エラーになります。そのため、/usr/bin/python を Python 3 に向けた時点で yum が動かなくなります。
yum 以外にも、CentOS 7 には /usr/bin/python を前提にした Python 2 製のシステムツール(firewall-cmd など)があり、同じ理由で動かなくなることがあります。
対処法
1. /usr/bin/python を Python 2 に戻す(推奨)
2.x 系に戻すとエラーが解決します。
# 現在のリンク先を確認
ls -l /usr/bin/python*
# Python 2 に戻す(CentOS 7 では python2 → python2.7 へのリンクがある)
sudo ln -sf python2 /usr/bin/python
# 確認
python -V # Python 2.7.x と表示されれば OK
sudo yum --version
2. urlgrabber-ext-down でも同じエラーが出る場合
yum の起動は直ったのに、パッケージのダウンロード中に /usr/libexec/urlgrabber-ext-down で SyntaxError が出ることがあります。これも Python 2 で書かれたスクリプトです。手順 1 でリンクを戻していれば解消しますが、リンクを戻せない事情がある場合は、各スクリプトの 1 行目を python2 に明示します。
# バックアップを取ってから 1 行目を書き換える
sudo cp -p /usr/bin/yum /usr/bin/yum.bak
sudo cp -p /usr/libexec/urlgrabber-ext-down /usr/libexec/urlgrabber-ext-down.bak
sudo sed -i '1s|^#!/usr/bin/python$|#!/usr/bin/python2|' /usr/bin/yum /usr/libexec/urlgrabber-ext-down
head -1 /usr/bin/yum # #!/usr/bin/python2 になっていることを確認
この方法は、yum のパッケージ更新でファイルが置き換わると元に戻ります。根本的には手順 1 の「/usr/bin/python は Python 2 のままにする」が確実です。
Python 3 を使いたいときの正しいやり方
システムの /usr/bin/python は書き換えず、次のいずれかの方法で Python 3 を使います。
| 方法 | やり方 | 特徴 |
|---|---|---|
python3 コマンドを使う | そのまま python3 / pip3 と打つ | 最も安全。システムに影響しない |
| 仮想環境 | python3 -m venv venv → source venv/bin/activate | 有効化した端末では python が Python 3 になる。プロジェクトごとに分けられる |
| エイリアス | ~/.bashrc に alias python=python3 | 対話シェルだけに効き、yum などのスクリプトには影響しない |
| pyenv | ユーザーのホームに任意のバージョンを入れて切り替える | 複数バージョンを使い分けたい場合 |
CentOS 8 以降・後継 OS との違い
- CentOS 8 / RHEL 8 以降の
yumは実体がdnfで、システム専用の Python 3(platform-python)で動くため、/usr/bin/pythonを変えてもこのエラーにはなりません - CentOS 7 は 2024 年 6 月 30 日にサポートが終了しており、標準のミラーからパッケージを取得できなくなっています。セキュリティ更新も提供されないため、AlmaLinux や Rocky Linux などへの移行を検討してください
確認方法
ls -l /usr/bin/pythonでリンク先がpython2(またはpython2.7)になっているかhead -1 /usr/bin/yumで、yum がどの Python を使う設定かsudo yum check-updateがエラーなく最後まで動くか(ダウンロード処理まで確認できる)
関連
- 【Linux】ln リンク/ショートカットの作成と削除
- yum コマンドの使い方|RedHat 系のパッケージ管理と dnf との関係
- Python 3 CentOS インストール完全ガイド
- Python 仮想環境の構築|venv・virtualenv・pipenv・poetry
子ページはありません
- curl: (51) SSL: certificate subject name '~' does not match target host name '~'
- mount: special device ... does not exist
- 【yum install php-fpm】エラー: パッケージ: php-fpm-5.4.16-46.el7.x86_64 (base)
- ファイルが開けません: https://centos7.iuscommunity.org/ius-release.rpm を飛ばします。
- File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
- unable to execute 'gcc': No such file or directory
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09