Python 3の環境をCentOS 7で作るのは大変と聞いたのでブログにまとめようと思いました。
Python 3環境をLinuxで作るんだったら迷わず FedoraやUbuntu、openSUSEをオススメします。これらは比較的新しいパッケージを提供するためです。
ただし、どうしてもRed Hat Enterprise LinuxとかCentOSでyumコマンドでインストール/アップデートできないと嫌なんですけど...という人には、「Software Collections」をオススメしたいと思います。
Software Collectionsについてはここら辺にまとまっています。簡単に言うと、システムに影響を与えることなくRHELやRHELクローン上でシステム標準パッケージよりも新しいバージョンを使えるような仕組みです。便利ではあるのですが、割とご存じない人が多いみたいですね。
その他
- Red Hat Software Collections 2.0 とは — | サイオスOSS | サイオステクノロジー
- Frequently Asked Questions — Software Collections
使い方
例えばPython 3.5を例にすると「Python 3.5 by Software Collections」の手順通りです。その他のパッケージは検索してみてください。Software Collectionは定期的に新しいバージョンに更新されるので、サイトの情報よりも新しいパッケージが提供されている場合もあります。
ちなみに2017年3月2日現在はPython 3.3、3.4、3.5がインストールできるようです。
ディストリビューション別の導入方法
Software CollectionsをRHELやRHELクローンで使う方法です。代表的なものをいくつか取り上げます。
Red Hat Enterprise Linux 7
$ sudo yum-config-manager --enable rhel-server-rhscl-7-rpms
CentOS 7
$ sudo yum install centos-release-scl
Scientific Linux 7
$ sudo yum install http://ftp1.scientificlinux.org/linux/scientific/7x/external_products/softwarecollections/yum-conf-softwarecollections-2.0-1.el7.noarch.rpm
Oracle Linux 7
Public YumにSCLがあるのでおそらく使えると思います。
[2017/10/19追記]
1.5 Installing the Software Collection Library Utility From the Oracle Linux Yum Server
CentOS 7で実際に使ってみた
インストールします。
$ sudo yum install rh-python35
もともとはPython 2.7.5が入っているようです。
$ python -V Python 2.7.5
シェルを切り替えてpythonを叩くと、今度はPython 3.5.1が呼ばれることがわかります。
Software Collectionsによりインストールされるバイナリーは大抵/optの下にインストールされます。
シェルを切り替えずにメインのシェルで動かすにはそのパスを叩けば良いですが、決して/usr/bin/python
を張り替えて「yumが動かない!」とか言わないでください。動かない原因を作ったのはあなたですからw
$ scl enable rh-python35 bash $ python -V Python 3.5.1 $ which python /opt/rh/rh-python35/root/usr/bin/python
[2017/10/19追記]
SCLでインストールしたパッケージは/optに展開されるので、次のように実行することでシェルの切り替えをすることなく、Python 3を使うことができるようになるそうです。
Permanently Enable a Software Collection - RHD Blog
例えばPython 3.3の場合は
source /opt/rh/python33/enable
これを.bashrcに書けば起動ごとにアクセス可能になるとか。
いつもの「こんにちは世界」でも動かしますか。
$ echo 'print("Hello world!")' > hello.py $ python hello.py Hello world!
print文はカッコで閉じるんですよ。