タイトル: Python3 のインストール
SEOタイトル: Python 3 CentOS インストール完全ガイド (yum/dnf/SCL/pyenv)
| この記事の要点 |
|
事前確認: 既存の Python バージョン
# 既存バージョン確認
python --version # 多くは 2.x (CentOS 7 の場合)
python3 --version # 入っていればバージョン表示
which python3
# CentOS / RHEL のバージョン確認
cat /etc/redhat-release
# 利用可能パッケージ確認
yum list python3* 2>/dev/null | head -30
# CentOS 8/RHEL 8 の場合
dnf list python3* 2>/dev/null | head -30
方法1: yum / dnf で公式パッケージ (推奨)
CentOS 7 / RHEL 7
# Python 3.6 (CentOS 7 の標準)
sudo yum install -y python3 python3-pip python3-devel
# 確認
python3 --version # Python 3.6.8
pip3 --version
# 3.8 / 3.9 など新しいバージョンを入れたい場合は IUS リポジトリ
sudo yum install -y https://repo.ius.io/ius-release-el7.rpm
sudo yum install -y python39 python39-pip python39-devel
python3.9 --version
# EPEL でも 3.8 等が手に入ることがある
sudo yum install -y epel-release
sudo yum install -y python38
CentOS 8 / Rocky Linux 8 / AlmaLinux 8 / RHEL 8
# 標準は 3.6 がインストール済 / 3.9, 3.11 もモジュールで提供
sudo dnf install -y python3 python3-pip # 3.6
# 3.9 をモジュールで
sudo dnf module install -y python39
python3.9 --version
# 3.11 を入れる
sudo dnf install -y python3.11 python3.11-pip
python3.11 --version
# デフォルト python3 を 3.11 にしたい
sudo alternatives --set python3 /usr/bin/python3.11
# 元に戻す
sudo alternatives --config python3
CentOS Stream 9 / Rocky 9 / RHEL 9
# 標準で 3.9 がインストール済
python3 --version
# 3.11 / 3.12 を追加
sudo dnf install -y python3.11
sudo dnf install -y python3.12
方法2: Software Collections (SCL) で複数バージョン
CentOS 7 で複数バージョンを共存させたい場合、Red Hat 公式の SCL が安定です。
# SCL リポジトリ追加
sudo yum install -y centos-release-scl
# Python 3.8 をインストール
sudo yum install -y rh-python38
# 一時的に有効化 (シェルセッション内)
scl enable rh-python38 bash
python3 --version # Python 3.8.x
which python3 # /opt/rh/rh-python38/root/usr/bin/python3
# 恒久的に有効化 (.bashrc に追記)
echo "source scl_source enable rh-python38" >> ~/.bashrc
# 利用可能な SCL Python 一覧
yum list "*python*" --enablerepo=centos-sclo-rh,centos-sclo-sclo
方法3: ソースビルド (最新版・自由度高)
パッケージで提供されない最新版や、特定オプション付きビルドが必要な場合。make altinstall でシステム Python を壊さず並列インストールします。
# 1. ビルド依存をインストール
sudo yum groupinstall -y "Development Tools"
sudo yum install -y openssl-devel bzip2-devel libffi-devel \
zlib-devel xz-devel readline-devel \
sqlite-devel ncurses-devel uuid-devel \
tk-devel gdbm-devel
# 2. ソース取得
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz
sudo tar xzf Python-3.11.9.tgz
cd Python-3.11.9
# 3. configure
# --enable-optimizations : PGO + LTO で 10〜30% 高速化 (ビルド時間↑)
# --enable-shared : libpython3.11.so を作成 (uwsgi 等で必要)
# --prefix : インストール先 (デフォルト /usr/local)
sudo ./configure \
--prefix=/usr/local \
--enable-optimizations \
--enable-shared \
--with-system-ffi \
LDFLAGS="-Wl,-rpath /usr/local/lib"
# 4. ビルド (CPU コア数で並列化)
sudo make -j$(nproc)
# 5. インストール (★ make install ではなく altinstall)
# install → /usr/local/bin/python3 を作成 → システム python3 と衝突する可能性
# altinstall→ /usr/local/bin/python3.11 のみ作成 → 安全
sudo make altinstall
# 6. 確認
/usr/local/bin/python3.11 --version
/usr/local/bin/pip3.11 --version
# 7. PATH 設定 (任意)
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
方法4: pyenv で複数バージョン管理 (個人開発向け)
# 1. pyenv 取得
curl https://pyenv.run | bash
# 2. .bashrc に追記
cat >> ~/.bashrc <<'EOF'
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
EOF
source ~/.bashrc
# 3. ビルド依存 (root)
sudo yum install -y gcc make patch zlib-devel bzip2 bzip2-devel \
readline-devel sqlite sqlite-devel openssl-devel \
tk-devel libffi-devel xz-devel
# 4. 利用可能なバージョン一覧
pyenv install --list | grep -E "^\s*3\.(11|12)" | tail -10
# 5. インストール
pyenv install 3.11.9
pyenv install 3.12.3
# 6. 切替
pyenv global 3.11.9 # デフォルト
pyenv local 3.12.3 # カレントディレクトリのみ
pyenv shell 3.10.13 # 現在シェルのみ
python --version # 切り替わる
システム Python を壊さない原則
CentOS / RHEL の yum や dnf はシステム Python (/usr/bin/python or /usr/libexec/platform-python) に依存しています。これを差し替えると OS パッケージ管理が壊れます。
| 禁忌 | 結果 |
|---|---|
sudo mv /usr/bin/python /usr/bin/python.bak | yum 起動不能 |
sudo ln -sf python3.11 /usr/bin/python | yum 動作不安定 |
sudo pip install --target=/usr/lib/python2.7/site-packages | システムパッケージと競合 |
./configure --prefix=/usr + make install | システム Python 上書き |
正しいやり方:
- 新バージョンは
/usr/local/または~/.pyenvに並列インストール make installではなくmake altinstall- システム標準と区別するため
python3.11のようなマイナーバージョン付き名で呼ぶ
virtualenv / venv で環境分離
プロジェクトごとに pip パッケージを分離すべき。venv は標準ライブラリ:
# プロジェクト作成
cd ~/myapp
python3.11 -m venv .venv
# 有効化
source .venv/bin/activate
(.venv) $ pip install --upgrade pip
(.venv) $ pip install django requests
(.venv) $ pip freeze > requirements.txt
# 無効化
deactivate
FAQ
Q: python コマンドで Python 3 を呼びたい
A: CentOS 8+ は sudo alternatives --config python で切替可能。CentOS 7 は ~/.bashrc に alias python='python3'。ただしシステムスクリプトが壊れる可能性あるので原則 python3 を使う。
Q: pip がインターネットアクセスできない
A: 社内プロキシ pip install --proxy=http://proxy:8080、社内 PyPI ミラー pip install --index-url http://nexus/repository/pypi-proxy/simple/。
Q: OpenSSL バージョンが古くて SSL エラー
A: CentOS 7 標準の OpenSSL 1.0.2 は PyPI と TLS 1.2 で接続不可になる場合あり。OpenSSL 1.1.1 を自前ビルドし、Python の configure 時に --with-openssl=/usr/local/openssl 指定。
Q: CentOS 7 のサポート切れ後はどうすべき?
A: CentOS 7 は 2024/6/30 EOL。Rocky Linux 8/9 / AlmaLinux 8/9 / CentOS Stream 9 等への移行を推奨。Python 3.9 / 3.11 が標準で使えます。