Edited at

PyKNP on WSL


はじめに

Windows Subsystem for Linux上でPyKNPを使った解析をしたくてがんばりました.

インストールする際にてこずったのでメモしておきます.どこまで参考になるかわかりませんが,同じ苦労をしないために...


20190716追記:LinuxシステムにAnacondaディストリビューションを導入する是非

もともとPythonがインストールされているLinuxディストリビューションにAnacondaを導入することについては賛否が分かれているようです.理由のひとつはOS備え付けのPythonをAnacondaが隠して?しまうことのようです.Linuxディストリビューションにpython環境を構築する場合はpyenvやvenv/virtualenvの利用も検討したほうがよいと思います.

私はAnacondaが目指すOpen Data Scienceに魅力を感じますし,現在の業務に必要なpythonライブラリの最新が(私のスキルでは)Linuxでしか使えないので,WSL+Anacondaという組み合わせを採用しました.

詳しくは下記をご覧ください

Anaconda は Environment Isolation Tool (環境分離ツール) ではない

pyenvが必要かどうかフローチャート


環境

OS:

- Name: Microsoft Windows 10 Pro

- Version: 10.0.17763 build 17763

WSL:

- Distribution ID: Ubuntu

- Description: Ubuntu 18.04.2 LTS

- Release: 18.04

- Codename: bionic


概要


  1. WSLの導入

  2. Anacondaの導入

  3. checkinstall, ccacheの導入

  4. Windows側のjuman, KNPのアンインストール

  5. Jumanのインストール

  6. KNPのインストール

  7. Juman++のインストール

  8. PyKNPのインストール


WSLの導入

こちらを参考にさせていただきました.投稿者様はWSL上にpython開発環境(Anaconda + Visual Studio Code)を構築されておりますが,私がVS Code (1.36.0)をwsl上に導入したところ,

“linux側はアンインストールしてwindows側でインストールして使え”

とメッセージが出ましたので,とりあえずはwslではpython環境のみ(pyknpを使えるように整備することにしました.

私が行ったことは


  • Windows Subsystem for Linuxの有効化

  • Linux distributionの導入

です.VcXsrvなどの導入は行っていません.詳細は上記の記事を参考にしてください.


Anacondaの導入

ここで行ったことは,インストーラーのダウンロードと実行です.

インストーラーは公式ページのダウンロードサイトからwgetしました.その後,インストーラーの実行権限を設定して,実行でインストールできました.

$wget https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh

$chmod +x Anaconda3-2019.03-Linux-x86_64.sh
$./Anaconda3-2019.03-Linumx-x86_64.sh

ダウンロードフォルダやインストール先は適当です.なお,こちらの記事で言及されているような,Visual Studio Codeの自動導入はありませんでした.


20190711追記

condaをアップデートしたりパッケージをインストールしようとしたりして下記のような警告が出た.

Conda is constrained to only using the old .tar.bz2 file format because you have conda-build installed, and it is <3.18.3. Update or remove conda-build to get smaller downloads and faster extractions.

conda-buildが古いようなので,警告文にしたがってアップデートしたら解決した.

$ conda update conda-build

以下を参照.

https://shirabeta.net/Conda-warning.html#.XSav3-j7Tb0


checkinstall, ccacheの導入

checkinstallは自分でビルドしたものをパッケージ管理できるようにするため,ccacheはビルドの高速化のためらしいです.こちらの記事をそのまま実行することができました.ありがとうございました.


Windows側のJuman, KNPのアンインストール

wslからwindows側の実行ファイル(juman.exeやknp.exe)を呼び出せてしまうため,「アプリと機能」からアンインストールしました.コマンドラインから認識できないようにパスを削除してもよかったのかもしれませんが,jumanやknpを用いた処理はすべてWSL上で行う予定なのでアンインストールを選びました.この作業が必要かどうかはわかりません.


Jumanのインストール

こちらの記事どおりにインストールすることができました.ありがとうございます.なお,私は

$./configure CFLAGS="-O3" CXXFLAGS="-O3"

の「O(大文字のオー)」を「0(ゼロ)」と間違えていていましたが,あまり問題はないようでした.あとから「O(オー)」に訂正してやり直しました.


KNPのインストール

引き続きこちらの記事を参考にさせていただきました.

何度かエラーがでたので,そのときの対応を以下に記します.


zlib.hがみつからんよって言われたとき

$sudo apt install zlib1g-dev



よくわからんエラーで迷走しているときに入れたもの

$sudo apt install autoconf automake libtool



ulimitあたりでコアダンプ

if [ -f cf.knpdict ]; then 

ulimit -Ss unlimited && /usr/local/src/knp-4.11/system/make_cf_index cf.idx cf.dat < cf.knpdict;
fi

makeのときに上記の箇所でsegmentation faultが起こって前に進めなくなりました.試しに

ulimit -c unlimited

としてmakeすると通りました.うまくいったときの一連の流れは以下の通りです.

$./configure CFLAGS="-O3" CXXFLAGS="-O3"

$ulimit -c unlimited
$make -j $(grep -c ^processor /proc/cpuinfo)
$sudo checkinstall

うれしかった.


Juman++のインストール

こちらの記事を参考にJuman++ Ver.1.02をインストールしようとしましたがうまくいかず.makeすると,

src/jumanpp -D jumanpp -resource

のところで

terminate called after throwing an instance of 'boost::interprocess::interprocess_exception' invalid argument

というエラーがでてしまいました.

ver.1.02のインストールはあきらめて,V2.0.0-rc2をインストールしました.インストールはGitHubの公式リポジトリの手順に従いました.

$ sudo apt install cmake

$ tar xf jumanpp-<version>.tar.xz # decompress the package
$ cd jumanpp-<version> # move into the directory
$ mkdir bld # make a subdirectory for build
$ cd bld
$ cmake .. \
-DCMAKE_BUILD_TYPE=Release \ # you want to do this for performance
-DCMAKE_INSTALL_PREFIX=<prefix> # where to install Juman++
$ make install -j<parallelism>

なお,私の環境にはすでにgcc7.4.0がインストールされていました.また,cmakeのインストール先(prefix)は/usr/local/に指定しました(デフォルトかも).

juman++ver.1.02のインストールの際に,google-perftools libgoogle-perftools-dev libboost-devをインストールしました.v2.0.0-rc2のインストール時にも必要かどうかは検証していません.

sudo apt install google-perftools libgoogle-perftools-dev libboost-dev


pyknp

Anacondaでパッケージが公開されていました(https://anaconda.org/temporary-recipes/pyknp).ほんとに助かりました.

$ conda install -c temporary-recipes pyknp

以上です.次は,windows上のVisual Studio Codeから上記で設定した環境を使えるようにします.

取り急ぎ,報告まで.