☆☆ 新着記事 ☆☆

2018年12月23日日曜日

CentOS 7 にPython 3系をインストールする4つの方法

Python 2.7がpre-install されているCentOS 7に、 Python 3.x をインストールする方法をまとめておきます。ネットで検索すると、インストールする方法は、大きく分けて、次の4つではないでしょうか?

選択のポイントは、Cent OS 7 にインストールされているPython2系を3.x系で置き換えるなどという事は、「絶対にやってはいけない。」(CentOS 7 に深く埋め込まれているので、簡単には出来ない。)ということのようですので、どの方法にするかは、どうやって共存(切り替え)するのか、にも影響するようです。

Method 1) SCL(Software Collection Library)からインストール
Method 2) pipでpackageとして 'epel レポジトリ' からインストール
Method 3) yum で、’IUSリポジトリ’からインストール
Method 4) ソースコードからインストール


Method 1) SCL(Software Collection Library)からインストール
 SCLとは
 Software Collections give you the power to build and concurrently install multiple versions of the  
 same components on your system, without affecting the system versions of the packages installed   
 from your distribution.

魅力的ですねー。

 Note that Software Collections obtained here are not necessarily supported by your distribution.
 For example, a Software Collection that you can install on Fedora may not be supported by the
 Fedora Project itself.

  Python 3.6  by  Software Collections

  rh-python36 - A release of Python 3.6 with a number of additional utilities. This Software  
 Collection gives developers on CentOS and RHEL access to Python 3.6 and allows them to benefit
 from various advantages and new features of this version. The rh-python36 Software Collection  
 contains Python 3.6 interpreter, a set of extension libraries useful for programming web applications  
 and mod_wsgi (only supported with the httpd24 Software Collection), PostgreSQL database
 connector, and numpy and scipy.

SCLでインストールをすると、他のパッケージもSCLに対応したものをインストールする必要があるようですが、あまり意識しなくても、他のバージョンに影響を受けない環境にできるのは、非常に魅力的です。

 (入手できるバージョンの確認)
 最新版は、https://www.softwarecollections.org/en/ で確認してください。
 最新版:rh-python36 (as of Dec 2018)

(手順) https://www.softwarecollections.org/en/docs/

   ・On CentOS, install the SCL release package `centos-release-scl`:
     $ sudo yum install centos-release-scl
  $ sudo yum-config-manager
 ・Install the main SCL package (its name is identical to the name of the Software Collection):
  $ yum install rh-python36
  ・Start using the Software Collection you just installed:
    $ scl enable rh-python36 bash

(実行)
以下を実行することで、シェルを切り替えることなく、インストールしたバージョンを使用することが可能。
source /opt/rh/python36/enable

又は、以下のように、新しいファイルを作ると,permanentにsclのバージョンを優先することが出来るようです。(このスクリプトは記事中にもありますが、公式サポートはされていません。)

https://developers.redhat.com/blog/2014/03/19/permanently-enable-a-software-collection/

cat /etc/profile.d/enablepython33.sh
#!/bin/bash
source /opt/rh/python33/enable
export X_SCLS="`scl enable python33 'echo $X_SCLS'`"

この手順は、以下で実際に実行してみました。
【Quick説明版】 WebArena VPS設定 (Apache -Firewall - Python3 -Let's Encrypt)


Method 2)  pipでpackageとして 'epel レポジトリ' からインストール
(pipは、CentOS 7 では、デフォルトではインストールされていないので、別にインストールする必要があります。 詳細は、(【Python PIP  良く使うコマンド一覧 】)

(入手できるバージョンの確認)
# yum list available | grep python
python.x86_64                             2.7.5-76.el7
python34.x86_64
python36.x86_64
 又は
# yum search python 又は # yum search --enablerepo=epel, python
いずれの場合でも、python36が取得できる最新版であることが分かります。
python36.x86_64 : Interpreter of the Python programming language

(手順)
yum install  --enablerepo=epel,  python36

(実行)
 基本的に pythonのバージョンを指定する必要があります。
 soft-link (symlink) for typical easy accessを作ることも可能。
 デフォルトで起動するPythonを指定する為にリンクを張り替えたりすると、yumが使えないなどの
  問題が発生することがあるようです。
 (個人的に、この動作の検証はしていませんので、あくまで参考として。)

 $ type -a python36
 python36 is /usr/bin/python36
 $ sudo ln -s /usr/bin/python36 /usr/bin/python3
 $ python3 — version
 Python 3.6.3

Method 3) yum で、’IUSリポジトリ’からインストール


ネット検索すると、IUSレポジトリを使う理由は、Python 3.6が epel レポジトリにはないから、という理由が多いようです。 epel に Python 3.6 が格納された現在、IUSレポジトリーを利用する必要は無いのではないでしょうか? もちろん、将来、また、このレポジトリが、epelよりも新しいバージョンを格納する可能性はありますから、下記の手順(又は、https://ius.io/のサイト)で、比較した方が良いとは思いますが、、、

(手順)
 (IUSレポジトリの追加)
 $ yum install -y https://centos7.iuscommunity.org/ius-release.rpm
 (インストールできるPythonのバージョン確認) # yum search python3
 (パッケージを指定してインストール)
 # yum install python36u python36u-libs python36u-devel  python36u-pip.noarch

(実行時)
 yum でepelからインストールした場合と同じ。
 pythonのバージョンを指定する必要があります。
 デフォルトで起動するPythonを指定する為にリンクを張り替えたりすると、yumが使えないなどの
 問題が発生することがあるようです。



Method 4) ソースコードからインストール

   最新版のPythonをダウンロードして使用することが可能です。また、パッケージも細かく指定
    してインストールすることができます。
 マイクロ・フレーム・ワークのFlaskを動かすときに必要となるmod_wsgiを利用する場合
 ソース・コードからPython3 をインストールすることが必須になります。

   (入手できるバージョンの確認)
   Python Orgのダウンロード・ページで確認。
   https://www.python.org/downloads/source/
   *rc1, rc2 とかは、release candidateの略なので、安定版を使うことにします。

  (手順) 
  (wget の入手)
  $ yum install wget
  Installed:
  wget.x86_64 0:1.14-18.el7

(wgetがコマンドとして実行されない場合)

 pip install wgetで、wgetをインストールした場合。
(Successfully installed wget-3.2)と表示されます。

 pipでwgetを取得すると、wgetというPython moduleがダウンロードされる。
 pip install wgetを再び実行すると、
 Requirement already satisfied: wget in /usr/lib/python2.7/site-packages (3.2)
 となる。
 site-packages のディレクトリを確認すると、
>wget-3.2-py2.7.egg-info
>wget.py
>wget.pyc
>yum
などが格納されていることが分かる。
この場合、wgetを実行したい場合、
python -m wget [取得したいURL]
で、実行できる。
  (コンパイルする為にgccをダウンロード)
  $sudo yum install gcc
  Installed:
  gcc.x86_64 0:4.8.5-36.el7

(Development Toolのインストール)

# yum --setopt=group_package_types=mandatory,default,optional groupinstall "Development Tools"

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel python-devel libffi-devel

  (Pythonのインストールしたいバージョンをダウンロード)
   $ cd /usr/local/src  ←既存のPython2と競合させない為、このディレクトリに入れて管理することはとても大事
 $sudo wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
  (インストールしたバージョンを解凍・展開)
 $ tar xvfz Python-3.7.2.tgz
   $ cd Python-3.7.2
  ./configure -prefix=/usr/local/
  ./configure --enable-shared
  $ sudo make altinstall

 
 ./configure --enable-sharedオプションについて
このオプションを指定しない場合、主要なバイナリファイルとして python という実行ファイルと libpython3.7.a (Python 3.7の場合) というライブラリファイルができます。

--enable-shared をつけた場合、 libpython3.7.so というダイナミックリンク用の shared object も生成され、 python はこの shared object をダイナミックリンクするようになります。
 
Pythonのパッケージによっては(例えば、FlaskやDjango)ではshared libraryの使用を強く推奨していますので、ソースをコンパイルした後は、このシェアド・オブジェクトが生成されているか、確認することをお勧めします。

*CentOS7に、Pyathon3.7をインストールしてコンパイルすると、以下のエラーがでることがあります。
ModuleNotFoundError: No module named '_ctypes'
libffi-devel' が見つけられないことが原因のようです、¥。

just do a 'yum install libffi-devel'


 
例)
[@ /]# find -name libpython*
./usr/lib64/libpython2.7.so.1.0
./usr/lib64/python2.7/config/libpython2.7.so
./usr/lib64/libpython2.7.so
./usr/share/systemtap/tapset/libpython2.7-64.stp
./usr/local/lib/python3.7/config-3.7m-x86_64-linux-gnu/libpython3.7m.a
./usr/local/lib/libpython3.7m.so.1.0
./usr/local/lib/libpython3.7m.so
./usr/local/lib/libpython3.so
./home/venv_env/venv_env_child/Python-3.7.2/Tools/gdb/libpython.py
./home/venv_env/venv_env_child/Python-3.7.2/libpython3.7m.a
./home/venv_env/venv_env_child/Python-3.7.2/libpython3.7m.so.1.0
./home/venv_env/venv_env_child/Python-3.7.2/libpython3.7m.so
./home/venv_env/venv_env_child/Python-3.7.2/libpython3.so
 



インストール後に、シンボリック・リンクを作成する。

【 「これで動く (1/3) !! WebArena VPS(CentOS7)でFlaskを動かす。」 
で、詳細を書いています。


又、シンボリック・リンクにの作成例は以下の通り。

$ ln -s /usr/local/bin/python3.7 /usr/bin/python3

$ ln -s /usr/local/lib/libpython3.7m.so.1.0 /lib64/

$ ln -s /usr/local/bin/pip3.7 /usr/bin/pip3.7


参考)
* Python 3 Installation on Centos 7
 https://medium.com/@gkmr.aus/python-3-6-x-installation-centos-7-4-55ada041a03
 
この投稿作成時には、見つけていませんでしたが、このblogも参考になります。
・ How to install the latest version of Python on CentOS

0 件のコメント:

コメントを投稿