AWSのEC2に最新のPython(3.10.8)をインストール(バージョンアップ)する方法

Python プログラミング

※画像は「https://www.python.org/downloads/release/python-3108/」より引用。

 
 
こんにちは、はるです。

AWSのEC2では、Pythonのバージョンが3.7と低く、バージョンアップして使い方が多いのではないかと思います。

私も、最新のPythonをインストールしてDjangoアプリを動かそうと思いました。しかし、エラーで詰まって苦戦しました。

本記事では、EC2に最新のPythonイをンストールする方法と、私が詰まったエラーの解決策をまとめておきます。

動作環境

  • Amazon Linux(EC2)
  • 64ビット(x86)
  • t2.micro

記事の内容

1. pyenvのインストール

Pythonのバージョンを使い分けできる「pyenv」を使って、Python3.10.8をインストールしていきます。

pyenvのインストールでは「git」を使うので、まずはgitがあるか確認します。

git --version

無い方は、gitをインストールしましょう。

sudo yum install git

では、pyenvのインストールです。

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

2. pyenvのパスを通す

pyenvをかんたんに呼び出せるように、パスを通します。

まず、「.bashrc」を開きます。

vi ~/.bashrc

以下の内容を、貼り付けてください。

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

pyenvのパスを通すコマンドを.bashrcに書き込む

貼り付けて保存できたら、以下のコマンドで反映させます。

source ~/.bashrc

パスが通ったか確認しておきましょう。

pyenv --version

3. pyenvでPythonのインストール

まず、pyenvでインストールできるPythonのバージョンを確認します。

pyenv install -l

ずらーと出てきますが、anacondaとか何も付いていないシンプルな「3.10.8」があればOKです。

では、インストールします。(数分かかる)

pyenv install 3.10.8

問題なければ、以下のように表示されます。

Downloading Python-3.10.8.tar.xz...
-> https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tar.xz
Installing Python-3.10.8...
Installed Python-3.10.8 to /home/xxx/.pyenv/versions/3.10.8

私はここでエラーが出ました。

configure: error: in `/tmp/python-build.20221117021638.6543/Python-3.10.8':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

どうやらCコンパイラーが入っていないとのこと。Cコンパイラーをインストールして解決しました。

sudo yum install gcc

もう一度Pytonをインストールしようとしたら、以下のエラーに。

subprocess.CalledProcessError: Command '['/tmp/python-build.20221117022705.7109/Python-3.10.8/python', '-W', 'ignore::DeprecationWarning', '-c', '\nimport runpy\nimport sys\nsys.path = [\'/tmp/tmpjki3o407/setuptools-63.2.0-py3-none-any.whl\', \'/tmp/tmpjki3o407/pip-22.2.2-py3-none-any.whl\'] + sys.path\nsys.argv[1:] = [\'install\', \'--no-cache-dir\', \'--no-index\', \'--find-links\', \'/tmp/tmpjki3o407\', \'--root\', \'/\', \'--upgrade\', \'setuptools\', \'pip\']\nrunpy.run_module("pip", run_name="__main__", alter_sys=True)\n']' returned non-zero exit status 1.
make: *** [install] エラー

調べると「OpenSSL1.1.1以降」が必要らしいので、インストール。

sudo yum install -y openssl11 openssl11-devel

再チャレンジして成功するも、警告が出ていました。

WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
WARNING: The Python curses extension was not compiled. Missing the ncurses lib?
WARNING: The Python ctypes extension was not compiled. Missing the libffi lib?
WARNING: The Python readline extension was not compiled. Missing the GNU readline lib?
WARNING: The Python sqlite3 extension was not compiled. Missing the SQLite3 lib?
WARNING: The Python lzma extension was not compiled. Missing the lzma lib?
Installed Python-3.10.8 to /home/xxx/.pyenv/versions/3.10.8

bzip2、ncursesなどをインストールします。

sudo yum -y install bzip2-devel
sudo yum -y install ncurses-devel
sudo yum -y install libffi-devel
sudo yum -y install readline-devel
sudo yum -y install sqlite-devel.x86_64
sudo yum -y install xz-devel

※まとめてインストールも可能↓

sudo yum -y install bzip2-devel ncurses-devel libffi-devel readline-devel sqlite-devel.x86_64 xz-devel

一度、Python-3.10.8をアンインストールし、もう一度インストール。

$ pyenv uninstall 3.10.8
pyenv: remove /home/xxx/.pyenv/versions/3.10.8? [y|N] y  ←「y」を押す
pyenv: 3.10.8 uninstalled
$ pyenv install 3.10.8
Downloading Python-3.10.8.tar.xz...
-> https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tar.xz
Installing Python-3.10.8...
Installed Python-3.10.8 to /home/xxx/.pyenv/versions/3.10.8

できた!!

4. Pythonのバージョンを切り替える

最後にpyenvでPythonのバージョンを切り替えます。

まず、現状を確認。

$ pyenv versions
* system (set by /home/xxx/.pyenv/version)
  3.10.8
$ python -V
Python 2.7.18
$ python3 -V
Python 3.7.10

では、「3.10.8」に切り替えます。

$ pyenv global 3.10.8

問題なく、「3.10.8」に切り替わっていればOKです。

$ python -V
Python 3.10.8

お疲れさまでした!!

参考

AWS Cloud9でPython(3.10.4)開発環境作ってみた