※画像は「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 -)"
貼り付けて保存できたら、以下のコマンドで反映させます。
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
お疲れさまでした!!
コメント