CentOS 7 や Amazon Linux 2 でのPython環境の構築

CentOS Logo Python

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 を使うと簡単
2022年6月時点での各インストール方法とそれによりインストールされるPythonのバージョン。
※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 が必要になったので、openssl11openssl11-devel パッケージをインストールする必要があります。

CentOS 7・Red Hat Enterprise Linux 7 では openssl11openssl11-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 では openssl11openssl11-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版がオススメです。

本サイトの内容は、投資の勧誘を目的としたものではなく、本サイト内の情報に基づいて行った取引の損失について、本サイトは一切の責を負いかねます。当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。免責事項もご覧ください。

Python
AIでFX

コメント

タイトルとURLをコピーしました