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 (環境分離ツール) ではない](https://qiita.com/t2y/items/dd6d7f9c70ac2b8a79da)
[pyenvが必要かどうかフローチャート](https://qiita.com/shibukawa/items/0daab479a2fd2cb8a0e7)

## 環境
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の導入
[こちら](https://hamukichi.hatenablog.jp/entry/2018/09/15/232325)を参考にさせていただきました．投稿者様は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の導入
ここで行ったことは，インストーラーのダウンロードと実行です．
インストーラーは[公式ページのダウンロードサイト](https://www.anaconda.com/distribution/)から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
```

ダウンロードフォルダやインストール先は適当です．なお，[こちらの記事](https://hamukichi.hatenablog.jp/entry/2018/09/15/232325)で言及されているような，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はビルドの高速化のためらしいです．[こちらの記事](https://qiita.com/SUZUKI_Masaya/items/bd03f39e20a1a8f7f4f6#%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)をそのまま実行することができました．ありがとうございました．

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

# Jumanのインストール
[こちらの記事](https://qiita.com/SUZUKI_Masaya/items/248a9260301435d42d5a)どおりにインストールすることができました．ありがとうございます．なお，私は

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

の「O（大文字のオー）」を「０（ゼロ）」と間違えていていましたが，あまり問題はないようでした．あとから「O（オー）」に訂正してやり直しました．

# KNPのインストール
引き続き[こちらの記事](https://qiita.com/SUZUKI_Masaya/items/248a9260301435d42d5a)を参考にさせていただきました．

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

```text:zlib.hがみつからんよって言われたとき
$sudo apt install zlib1g-dev
```

```text:よくわからんエラーで迷走しているときに入れたもの
$sudo apt install autoconf automake libtool
```

```error: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++のインストール
[こちらの記事](https://qiita.com/SUZUKI_Masaya/items/29c81d037cdf7d37b900)を参考に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の公式リポジトリ](https://github.com/ku-nlp/jumanpp)の手順に従いました．

```
$ 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から上記で設定した環境を使えるようにします．

取り急ぎ，報告まで．