らくがきちょう

なんとなく

CentOS7 に pyenv で Python 3.7.x 系をインストールする

以前に CentOS 7.5 に pyenv をインストールし、任意バージョンの Python を利用するというメモを書きましたが、CentOS7 上で pyenv を使って Python 3.7.x 系をインストールしようとするとエラーになってしまいます。 事前に libffi-devel をインストールしておくことで 3.7.x 系もインストール出来るようになりましたので、改めて手順をメモしておきます。

libffi-devel が無い場合のエラー

libffi-devel が不足している状態で pyenv install 3.7.2 のように実行すると、以下のようなエラーになりました。

ModuleNotFoundError: No module named '_ctypes'
make: *** [install] エラー 1

BUILD FAILED (CentOS Linux 7 using python-build 20180424)

Inspect or clean up the working tree at /tmp/python-build.20190403154806.15081
Results logged to /tmp/python-build.20190403154806.15081.log

Last 10 log lines:
  File "/tmp/tmp2doacv3c/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/main_parser.py", line 12, in <module>
  File "/tmp/tmp2doacv3c/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/__init__.py", line 6, in <module>
  File "/tmp/tmp2doacv3c/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/completion.py", line 6, in <module>
  File "/tmp/tmp2doacv3c/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 20, in <module>
  File "/tmp/tmp2doacv3c/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/download.py", line 37, in <module>
  File "/tmp/tmp2doacv3c/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in <module>
  File "/tmp/python-build.20190403154806.15081/Python-3.7.3/Lib/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
make: *** [install] エラー 1

pyenv 環境構築手順 (libffi-devel あり)

以下を実行し、pyenv 環境を構築していきます。

yum -y install \
  bzip2 \
  bzip2-devel \
  gcc \
  git \
  libffi-devel \
  openssl \
  openssl-devel \
  readline \
  readline-devel \
  sqlite \
  sqlite-devel \
  zlib-devel
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
cat << 'EOS' >> ~/.bashrc
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
EOS
source ~/.bashrc

Python 3.7.x 系のインストール

pyenv で Python 3.7.x 系をインストールしてみます。 今回は 3.7.3 をインストールしてみました。

pyenv install 3.7.3

例によって多少の時間はかかりますが、無事にインストールが完了しました。 後は必要に応じて global な Python のバージョンを調整する等、必要なアクションを実行していきます。

pyenv global 3.7.3
pyenv rehash