テキストマイニングのために、WindowsのPythonでigraphを使おうと
pip import igraph したところ……
うまく動かずにハマったので、WindowのPythonでigraphをインストールして使えるようにする方法を残しておきます。
インストール環境の前提
私の環境は、OSはWindows10で、Pythonは64bit版の3.6版で行った方法になります。
以下の記事の内容を実行するときは、自分の環境に読み替えて実行してください。
また、あくまで私の環境ではうまく行った方法なので、すべての人の環境で動くかはわかりませんのでご了承ください。
それと、とにかく動くようになる手順だけを示しており、解説はしていませんので詳しい理由を知りたい方は他の記事を参照してください。
igraphが動かないと思った状況
「Pythonによるテキストマイニング入門」のサンプルを動かそうとしてうまくいきませんでした。
pip install igraph はうまくいったのですが、
from igraph import * と記述したファイルを実行しようとすると、
DeprecationWarning: To avoid name collision with the igraph project, this visualization library has been renamed to ‘jgraph’. Please upgrade when convenient.
のメッセージが出てきました。そこで、
pip install jgraph して、
from jgraph import * にしてみたところ、
g = Graph(vertex_attrs = {“label”:vertices, “name”:vertices}, edges=edges, directed=False) の箇所で
NameError: name ‘Graph’ is not defined
のエラーメッセージが出てきました。
必要なのは、python-igraphパッケージだった
igraphもjgraphも求めているグラフ分析パッケージではありませんでした。
求めているのは、igraph です。(このページにあるpython-igraphです)
pip uninstall igraph
pip uninstall jgraph しましょう。
そして、python版の公式ページ には、Windowsだと
pip install python-igraph ではインストールできないと明言されています。
入れようとすると、
Cannot find the C core of igraph on this system using pkg-config.
WARNING: we were not able to detect where igraph is installed on
your machine (if it is installed at all).
WARNING: we were not able to detect where igraph is installed on
your machine (if it is installed at all).
のエラーメッセージが出てきます。
公式ページで、有志の方が作成した非公式ビルドをすすめていますので、それを利用します。
(公式チームではWindowsマシンを使用していないから、インストーラーの提供はしていないようです)
ただし、igraphはグラフのプロットにCairoというライブラリが必要になるので、まずこちらをインストールします。
pycairoをこのページからダウンロードします。
私の環境の場合は、Python3.6で64bit版なので、
pycairo-1.18.0-cp36-cp36m-win_amd64.whl をダウンロードしました。
ダウンロードしたパスに移動して
pip install pycairo-1.18.0-cp36-cp36m-win_amd64.whl
をしてインストールします。
( ~~.whl’ looks like a filename, but the file does not exist のようなエラーメッセージが出る場合は、フルパスを指定してインストールしてください)
次に、python-igraphをこのページからダウンロードして、インストールします。
pip install python_igraph-0.7.1.post6-cp36-cp36m-win_amd64.whl
2つをインストールできたら、
from igraph import *
g = Graph(vertex_attrs = {“label”:vertices, “name”:vertices}, edges=edges, directed=False)
が問題なく動くようになっていると思います。
それにしても、WindowsとPythonの相性の悪さは、イヤになりますね。