はむ吉(のんびり)の練習ノート

主にプログラミングについて、思いついたことや、試してみたこと、学んだことを、覚え書きを兼ねてまとめます。

CentOS 7環境でPython開発ツールを整備する:インタプリタの導入,仮想環境の作成とIDEの設定

昨日,USBメモリCentOS 7をインストールし,無事に動作させることができましたが,開発環境の整備はまだでした.そこで,まずは私が本業でも趣味の競技プログラミングでもよく使っているPythonを使用できるように設定しました.具体的には,Python 3.5処理系,仮想環境管理ツールであるvirtualenvとvirtualenvwrapper,およびIDEであるSpyderを導入,設定しました.ここでは,そのときに行った作業を,備忘録を兼ねてまとめておきます.

前提

以下の操作は,次の記事に記した作業によって構築したCentOS 7デスクトップ環境で行いました.

hamukichi.hatenablog.jp

作業手順

Python 3インタープリタの導入

私の環境では標準でPython 2が導入されていましたが,Python 3は未導入でした.そこで,以下の操作によりPython 3をyumでインストールしました.最新のものを使ってもよいのですが,ここではライブラリの対応状況を考慮して,Python 3.5を使うことにしました.

Python 3はCentOS 7が標準で使用するyumリポジトリではなく,IUS Community Projectのそれで提供されています.そこで,このリポジトリを利用可能にしたうえで,Python 3.5とそのライブラリや,パッケージ管理ツールpipを導入しました*1

# yum install -y https://centos7.iuscommunity.org/ius-release.rpm
# yum install -y python35u python35u-libs python35u-devel python35u-pip

以降はpython3.5Python 3.5インタプリタを,またpip3.5Python 3.5用のpipを起動できます.

virtualenvとvirtualenvwrapperの導入と,それを用いた仮想環境の作成

私は主にPython 3系を使っていますが,未だにPython 2系が必要となる場面がときどきあります.また,各種パッケージはなるべくグローバル環境ではなく各目的ごとの仮想環境に導入したいと考えています.そこで,以下の手順によりvirtualenvとその補助ツールvirtualenvwrapperを導入し,インタプリタや仮想環境の切り替えを容易に行えるようにしました.

まず,上述のpipを用いて,両ツールを導入しました.

# pip3.5 install virtualenv
# pip3.5 install virtualenvwrapper

次に,公式ドキュメントの記述に準じて,シェル起動時に読み込まれるファイル(~/.bashrcなど)に以下の記述を行った上で,これを再読み込みしました.

export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.5  # which python3.5 で確認
source /usr/bin/virtualenvwrapper.sh  # which virtualenvwrapper.sh で確認

以上で両ツールの設定はできたので,仮想環境を作成しました.

mkvirtualenv --python=python3.5 py35def  # Python 3.5を使った環境の作成
deactivate # そこからグローバルへ抜ける
mkvirtualenv --python=python2.7 py27def  # Python 2.7を使った環境の作成
deactivate
workon python35def # Python 3.5を使った環境に入る

以下では,断りの無い限りpy35def仮想環境で作業しました.

Spyderの導入,設定

Spyderは主に科学技術計算向けのPythonIDEですが,高度なデバッグ/テスト機能など,それ以外の開発にも便利な機能を多数備えています.以下の手順でこれを導入しました.

Spyder,あるいはそれが依存するライブラリの中には,純Pythonライブラリだけではなく,C/C++のコードが含まれたライブラリも存在します.これらをビルドできるように,あらかじめyumGCCを導入しました.

# yum -y install gcc

その上で,以下のようにSpyderと,その動作に必要なPyQt5を導入しました.

pip install PyQt5
pip install spyder

ところが,このままでは以下のようなエラーによりSpyderが異常終了してしまいました.

(py35def) [hamukichi@localhost test]$ spyder &
[1] 18531
(py35def) [hamukichi@localhost test]$ Traceback (most recent call last):
  File "/home/hamukichi/.virtualenvs/py35def/lib/python3.5/site-packages/qtpy/QtWebEngineWidgets.py", line 22, in <module>
    from PyQt5.QtWebEngineWidgets import QWebEnginePage
ImportError: libXss.so.1: cannot open shared object file: No such file or directory
(以下略)

そこで,yum provideslibXss.so.1を提供しているlibXScrnSaverを特定し,導入しました.

(py35def) [root@localhost test]# yum provides '*/libXss.so.1'
(中略)
libXScrnSaver-1.2.2-6.1.el7.x86_64 : X.Org X11 libXss runtime library
リポジトリー        : base
一致          :
ファイル名    : /usr/lib64/libXss.so.1
(py35def) [root@localhost test]# yum install libXScrnSaver
(後略)

これで,Spyderを使う準備が整いました.空のスクリプトを作成し,以下のようにSpyderで開きました.

touch test.py
spyder test.py &

次の画像は,SpyderでおきまりのHello Worldを試しに作成しているところです.フォントはFira Codeを利用しました.

f:id:hamukichi_nbr:20170812144409p:plain

感想

Spyderの導入がらみで少しつまづいたものの,概ねスムーズに一連のツールを導入できました.今後は,C/C++Haskellなどの開発環境を整えていきたいと考えています.