CentOS7にPython3.7をインストール

Twitterでシェア FaceBookでシェア はてなブックマークでシェア

Linux - CentOS7
2018年11月22日21:14に更新(約21日前)
2018年10月9日0:51に作成(約65日前)

旧ブログ移行記事です。

概要

CentOS7でDjangoを動かすシリーズシリーズの一つです。CentOS7にPython3.6をインストールしていきます。

yumでのインストール

楽にインストールしたいならばこちらが手軽です。EPELにPython3.6系が登録されているので、そこからインストールするのが簡単です。

EPELとは

CentOSのパッケージ管理システムであるyumを使ったとき、リポジトリという場所からプログラムをインストールします。リポジトリにはCentOS標準のものと、サードパーティ製のものがあります。 サードパーティ製のもので最も有名なリポジトリの1つがEPELで、今回インストールする新しめなPythonもEPELの中に入っています。

EPELリポジトリを追加しておきましょう。既に追加済みかもしれません。

sudo yum install epel-release

インストールと確認

まずですが、python36が本当にEPELリポジトリにあるか、実は気のせいなんじゃないか、確認しておきましょう。yum search パッケージ名 での検索はよく使います。3.6ではなく、36としましょう。

sudo yum serarch python36

するとたくさん出てきました。ちゃんと入っていました。

python36.x86_64 : Interpreter of the Python programming language
python36-coverage.x86_64 : Code coverage testing module for Python 36
python36-debug.x86_64 : Debug version of the Python runtime
python36-devel.x86_64 : Libraries and header files needed for Python development
python36-idle.x86_64 : A basic graphical development environment for Python
python36-jsmva.noarch : TMVA interface used by JupyROOT
python36-jupyroot.x86_64 : ROOT Jupyter kernel
python36-libs.x86_64 : Python runtime libraries
python36-nose.noarch : Discovery-based unittest extension for Python 3.6
python36-numpy.x86_64 : A fast multidimensional array facility for Python 3.6
python36-numpy-f2py.x86_64 : f2py for numpy
python36-parso.noarch : Parser that supports error recovery and round-trip parsing
python36-pdir2.noarch : Pretty dir() printing with joy
python36-root.x86_64 : Python extension for ROOT
python36-setuptools.noarch : Easily build and distribute Python 36 packages
python36-six.noarch : Python 2 and 3 compatibility utilities
python36-test.x86_64 : The self-test suite for the main python3 package
python36-tkinter.x86_64 : A GUI toolkit for Python
python36-uwsgidecorators.x86_64 : Python 3.6 decorators providing access to the uwsgi API

python36が本体で、python36-develは拡張モジュールのインストール等に使います。

sudo yum -y install python36  python36-devel

そして、pipも使えるようにしておきます。

sudo python3.6 -m ensurepip

まず、pythonコマンドが使えるか確認しておきましょう。対話モードが開かれればOKです。

sudo python3.6

pipコマンドも使えるか確認しておきます。ここでは、pipenvというライブラリをインストールします。

sudo python3.6 -m pip install pipenv

そう頻繁に利用するものでもありませんが、tkinteridleなどを使いたくなったら、sudo yum install python36-idle python36-tkinter としてインストールします。

ソースからインストール

EPELなどの主要リポジトリにまだ最新のPythonが入っていない場合もあります。他のリポジトリを利用するのも一つの手ですが、原始的なソースファイルからのビルド方法も知っておくと便利です。

以下の2つは、インストールされていなければビルドに失敗したので最優先でインストールします。

sudo yum install zlib-devel libffi-devel

Windows環境だとそう気にする必要はないのですが、Unix系OSにおいて、いくつかのPythonモジュールは外部のパッケージに依存していることがあります。このままでもビルドはできますが、sqlite3モジュールであったり、いくつかのモジュールは利用できません。それらを使うには、それらに対応したパッケージをインストールする必要があります。

概ね、以下をインストールしていれば事足りるはずです。

sudo yum install bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel

後になってModuleNotFoundError: No module named '_curses'ModuleNotFoundError: No module named '_bz2'ModuleNotFoundError: No module named '_tkinter', 等がでるのは、↑のが足りていません。

気づきにくいものだと、対話モードでキーを押しても^[[A とか表示されたら、それはreadline-devel が入ってません。

また、pipを使った際に

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/django/

などが出ればopenssl-devel が必要かもしれません。

yumで対応するものを...↑のを一括でインストールしていれば基本的には問題ないはずですが、その後にもう一度ビルド..../configure, make, sudo make altinstall をすれば治ります。

今回はPython3.7.0をインストールします。

curl -O https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar xf Python-3.7.0.tgz
cd Python-3.7.0
./configure
make
sudo make altinstall

Python公式曰く、

警告 make install は python3 バイナリを上書きまたはリンクを破壊してしまうかもしれません。そのため、make install の代わりに exec_prefix/bin/pythonversion のみインストールする make altinstall が推奨されています。

とあるので、make altinstall としています。

./configure ですが、./configure --prefix=/opt/python3.6.4 のようにするとPythonのインストール先を変更できます。デフォルトでは/usr/local です。このパスを起点として、実行ファイル(コマンドとなるもの、python3.7やpip3.7)はbin以下に入りますし、ライブラリ関連はlib/python3.7以下に入っていきます。このルールを覚えておけば、--prefixを指定しても迷わないと思います。

これで大体終了なのですが、sudo 権限をつけたsudo python3.7sudo pip3.7 は動作しないかもしれません。python3.7やpip3.7は/usr/local/bin にあります。sudoにもパスというものがあり、/usr/bin とかほにゃららsbin, といったパスは見てくれるのですが、/usr/local/bin はデフォルトで確認しません。

/usr/bin などにリンクを作成してもいいですが、今回はsudoパスに/usr/local/bin を追加することにしました。

設定ファイルを開きます。

sudo visudo

以下のように書き換えます。

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
↓
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
Twitterでシェア FaceBookでシェア はてなブックマークでシェア

記事にコメントする