はじめに
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
概要
- WSLの導入
- Anacondaの導入
- checkinstall, ccacheの導入
- Windows側のjuman, KNPのアンインストール
- Jumanのインストール
- KNPのインストール
- Juman++のインストール
- 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のインストール
引き続きこちらの記事を参考にさせていただきました.
何度かエラーがでたので,そのときの対応を以下に記します.
$sudo apt install zlib1g-dev
$sudo apt install autoconf automake libtool
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から上記で設定した環境を使えるようにします.
取り急ぎ,報告まで.