CentOS 7 は 2024年6月30日にサポート終了を迎えます。しかし、後継となる CentOS 8 のサポートが 2021 年末で終了してしまったことから、まだ CentOS 7 をお使いの方も多いのではないでしょうか。CentOS 7 は最初のバージョンが 2014年にリリースされた古い OS です。このため、最近のソフトウェアを利用するには少し工夫が必要になることがあります。
今回は、CentOS 7 や、CentOS 7 と互換性の高い Red Hat Enterprise Linux 7、Amazon Linux 2 で最新の Python 環境を構築する方法をまとめてみました。
CentOS 7 等で利用可能な Python 環境の比較
CentOS 7 系で Python をインストールする方法は下の表で示したように複数あります。結論から言いますと、pyenv を用いて最新のバージョンの Python をビルドして使うのがオススメです。
インストール方法 | Pythonのバージョン | 備考 |
標準リポジトリ (python) | 2.7.5 | サポート終了 (※1) |
標準リポジトリ (python3) | 3.6.8 | サポート終了 (※1) |
Amazon Linux 2の標準リポジトリ (python3) | 3.7.10 | |
Amazon Linux 2のExtras library (python3.8) | 3.8.5 | |
Software Collections (rh-python36) | 3.6.12 | サポート終了 |
Software Collections (rh-python38) | 3.8.11 | |
ソースをビルド | 任意のバージョン | pyenv を使うと簡単 |
※1: Upstreamによるサポートは終了しましたが、Red Hat によるセキュリティフィックスのバックポートは行われます。(参考)
CentOS 7 系の最終バージョンである CentOS 7.9 で標準で提供される Python のバージョンは 2.7 と3.6 です。既にサポートは終了しているバージョンで(※1)、サードパーティーのライブラリやフレームワークにも対応しないものが増えてきています。もはや使うべきではありません。
Red Hat Software Collections (SCL) や Amazon Linux 2 の Extras library では Python 3.8 が提供されます。これらは簡単に使い始められるのがメリットです。しかし、Python 3.8は既にバグ修正は終了しており、今後はセキュリティ修正のみ行われます。このため、Python 3.8 を今から新規に使い始めるのはおすすめしません。
Pythonをソースから自分でビルドすれば、任意のバージョンの Python を利用することができます。pyenv を用いることで、ソースの取得・ビルド・インストール・環境の切り替えを自動的に行ってくれます。
準備 (CentOS7, Red Hat Enterprise Linux 7 の場合)
まず、ビルドに必要な環境を整えます。
Python 3.10 からは OpenSSL 1.1.1 が必要になったので、openssl11
と openssl11-devel
パッケージをインストールする必要があります。
CentOS 7・Red Hat Enterprise Linux 7 では openssl11
と openssl11-devel
パッケージのインストールに EPEL リポジトリを用います。EPEL が使えることを確認します。
EPELが使えるか確認 ("disabled" または "無効" になっていてもOK)
$ sudo yum repolist all
(略)
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 enabled: 13754
(略)
CentOS 7 で EPELを使えるようにする
$ sudo yum install epel-release
Red Hat Enterprise Linux 7 で EPEL を使えるようにする
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
必要なパッケージをインストールしていきます。
$ sudo yum groupinstall "development tools"
$ sudo yum install bzip2-devel gdbm-devel libffi-devel libuuid-devel ncurses-devel \
openssl11 openssl11-devel readline-devel sqlite-devel xz-devel \
zlib-devel tk-devel --enablerepo=epel
tk-devel パッケージは tkinter を使ったGUIアプリケーション(たとえばmatplotlib の show()など)の実行に必要なものですが、GUIアプリケーションを実行しないサーバーなどの場合にはインストールする必要はありません。
EPELからインストールした OpenSSL 1.1.1 は、標準の場所と異なる場所にインストールされるため、Python のビルドがうまくいきません。このため、シンボリックリンクを張ります。
$ sudo mkdir /usr/local/openssl11
$ sudo ln -s /usr/lib64/openssl11 /usr/local/openssl11/lib
$ sudo ln -s /usr/include/openssl11 /usr/local/openssl11/include
Python のビルドシステムが OpenSSL のヘッダ・ライブラリを見つけられるように、PYTHON_CONFIGURE_OPTS
環境変数でOpenSSLの場所を指定します。
BASHの場合
$ echo 'export PYTHON_CONFIGURE_OPTS="--with-openssl=/usr/local/openssl11"' >> ~/.bashrc
ZSHの場合
$ echo 'export PYTHON_CONFIGURE_OPTS="--with-openssl=/usr/local/openssl11"' >> ~/.zshrc
BASH・ZSH共通 (設定を反映させる)
$ exec "$SHELL"
この他、--enable-optimizations
(PGO; Profile Guided Optimization による最適化を行う) や --enable-shared
(ダイナミックリンク用のshare objectを生成する) なども PYTHON_CONFIGURE_OPTS
環境変数で設定できます。
準備 (Amazon Linux 2 の場合)
Amazon Linux 2 では openssl11-devel
と、旧バージョンの openssl-devel
は共存できないので、もしインストールされている場合にはあらかじめアンインストールしておきます。
$ sudo yum remove openssl-devel
Amazon Linux 2 では openssl11
と openssl11-devel
パッケージは標準リポジトリからインストールできるため、EPEL は不要です。
必要なパッケージをインストールしていきます。
$ sudo yum groupinstall "development tools"
$ sudo yum install bzip2-devel gdbm-devel libffi-devel libuuid-devel ncurses-devel \
openssl11 openssl11-devel readline-devel sqlite-devel xz-devel \
zlib-devel tk-devel
tk-devel パッケージは tkinter を使ったGUIアプリケーション(たとえばmatplotlib の show()など)の実行に必要なものですが、GUIアプリケーションを実行しない環境のサーバーなどの場合にはインストールする必要はありません。
Amazon Linux 2 の OpenSSL 1.1.1 は標準的な場所にインストールされるため、シンボリックリンクを張ったり、PYTHON_CONFIGURE_OPTS
環境変数でOpenSSLの場所を指定する必要はありません。
pyenv のセットアップ
pyenv を用いると、複数のバージョンの Python を簡単にビルド・インストールし、使い分けることができます。次のようにして pyenv をインストールします。~/.pyenv 以下にインストールされます。
$ curl https://pyenv.run | bash
次に、pyenv のために環境変数を設定します。BASHの場合の最後の3行では、~/.bash_profile に設定を書き込んでいますが、もし~/.bash_profile
と ~/.bash_login
の両方が存在しない場合には、~/.bash_profile
のかわりに ~/.profile
に書き込んでください。もし、~/.bash_profile
が存在せず、~/.bash_login
が存在する場合には、~/.bash_profile
のかわりに ~/.bash_login
に書き込んでください。bash の設定ファイルの優先順位は ~/.bash_profile
→ ~/.bash_login
→ ~/.profile
の順になっているためです 。
BASHの場合
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
ZSHの場合
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc
最後に、シェルを再起動することで、pyenv のセットアップは完了です。
$ exec "$SHELL"
pyenv で Python をインストールする
インストール可能なバージョンの一覧を表示します。
$ pyenv install --list
Available versions:
2.1.3
2.2.3
(略)
3.10.4
3.10.5
3.11.0b3
3.11-dev
(略)
例えば、Python 3.10.5 をインストールするには次のようにします。Tab キーでサブコマンドやバージョン番号の補完入力もできます。この方法でインストールすると、Python は ~/.pyenv/versions/
以下にインストールされます。同様にして、Anaconda や Miniconda もインストールできます。
$ pyenv install 3.10.5
Downloading Python-3.10.5.tar.xz...
-> https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tar.xz
Installing Python-3.10.5...
Installed Python-3.10.5 to /home/ec2-user/.pyenv/versions/3.10.5
pyenv versions
で、インストールされている Python の一覧を表示します。
$ pyenv versions
* system (set by /home/ec2-user/.pyenv/version)
3.10.5
Python のバージョンを切り替えます。全てのディレクトリで切り替える pyenv global
と、特定のディレクトリ以下でのみ切り替える pyenv local
があります。
$ pyenv global 3.10.5
$ pyenv local 3.10.5
次の例ではディレクトリ test
の中で pyenv local
を行うことで、ディレクトリ test
の中だけで指定したバージョンのPython が使われることを示します。プロジェクトごとに異なるバージョンの Python を使う場合に便利です。
$ mkdir test && cd test
$ python -V
Python 2.7.18
$ pyenv local 3.10.5
$ python -V
Python 3.10.5
$ cd ..
$ python -V
Python 2.7.18
pyenv local
で指定したバージョンは、各ディレクトリの .python-version というファイルに記録されています。
pyenv-virtualenv
pyenv を利用することで、異なる複数のバージョンの Python をインストールし、使い分けることができるようになりました。さらに、virtualenv プラグインを利用することで、同じバージョンの Python 環境を複数作成することができるようになります。利用するパッケージをプロジェクトごとに変えたい場合などで便利です。上記の手順 (https://pyenv.run のインストールスクリプトを利用) で pyenv をインストールした場合には、virtualenv プラグインも既にインストールされています。
testenv という名前で Python 3.10.5 の仮想環境を作成します。バージョンを省略した場合には、現在のディレクトリで有効になっている Python が用いられます。
$ pyenv virtualenv 3.10.5 testenv
仮想環境の一覧を表示します。
$ pyenv virtualenvs
3.10.5/envs/testenv (created from /home/ec2-user/.pyenv/versions/3.10.5)
testenv (created from /home/ec2-user/.pyenv/versions/3.10.5)
仮想環境に切り替えます。警告メッセージを表示しないようにしたい場合には、~/.bashrc 等に export PYENV_VIRTUALENV_DISABLE_PROMPT=1
を加えておきます。
$ pyenv activate testenv
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(testenv) $
仮想環境から脱出し、元の環境に戻ります。
$ pyenv deactivate
不要になった仮想環境を削除します。
$ pyenv uninstall testenv
pyenv local
を用いることで特定のディレクトリ内だけで、指定した仮想環境を有効にすることもできます。
$ pyenv local testenv
PythonでFX分析や取引を始めるための入門書としては、Pythonによるファイナンス 第2版がオススメです。
コメント