前置き
この記事はpyenv + anaconda
の記事を読みまくった初心者機械学習エンジニアが、
サービス導入する時のサーバー(Ubuntu 16.04.2 LTS)に
この2つを入れるべきなのかを考え抜いた結果、単体インストールを試みた記事です。
そもそもpythonのバージョンをサーバーで分ける必要があるのか
pyenvを導入する理由は人それぞれだと思うが、以下の理由が結構でかいのではと思う
pipでライブラリなどを入れた場合、グローバル空間に入っちゃうので複数のバージョンが入れられない
Linux環境だと、Pythonは2系/3系の2つしかパッケージでは入れられない。
僕が導入を試みているサーバー環境だとそもそもpythonで動いているサービスが存在していないので、
複数バージョンを入れるケースもなく、必要もないと考えた。
また、Ubuntu 16.04.2 LTSではデフォルトでPython 3.5/Python 2.7が入っている。
最新のPython 3.6を入れる必要があるか考えた。
読んでみて、自分の開発しているスクリプトを見た。
一つも取り入れている新しい機能もなく、3.6も必要ないと感じた。
そうすると、pyenvいらないのでは?と思ったのである。
ただしpip、お前には入ってもらう。
$ sudo apt install python3-pip python3-dev
$ sudo pip3 install --upgrade pip
参考 : pyenvが必要かどうかフローチャート
SVM使うだけで本当にanacondaまで入れる必要あるのか?
これまで、開発に導入しているSVM(サポートベクターマシン)はscikit-learnのライブラリとして使用しているのでanacondaで一発導入していた。
anadondaの説明については、puhitakuさんの記事が分かりやすかったので引用させて頂く。
Anacondaは簡単に言うと「最初からNumpyやJupyter Notebookが入っていて、ビルド済みバイナリをインストールすることで利用者の環境構築が省け、ついでに複数バージョンのPythonを管理したり環境を切り替えることもできる一大ディストリビューション」である。
読んでみて、自分の開発しているスクリプトを見た。
numpy, pandasは使うが、Jupyter Notebookやmatplotlibも使わない。
複数バージョンのPythonを管理したり環境を切り替える
切り替えない
あれこれもはや導入する意味あるのだろうかと考えた結果、
単体インストールでいいんじゃね
と結論を出しました。
というわけで、単体インストールを行ったので、コードを残しておく。
mecabのインストール
$ sudo apt-get install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8
numpy, scipy, scikit-learn, mecab-python3のインストール
$ sudo pip3 install numpy scipy scikit-learn pandas mecab-python3
memo : scikit-learnはビルドにnumpy
とscipy
を使っているので、入れていないとimportできないので入れておく。
mecab-NEologdのインストール
新語に対応したmecab-NEologdも導入する
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ ./bin/install-mecab-ipadic-neologd -n
$ sudo sed -i -e '5,5d' /etc/mecabrc
$ sudo sed -i -e '4a\dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologd' /etc/mecabrc
最後の二行は
$ echo `mecab-config --dicdir` "/mecab-ipadic-neologd"
でインストール先のmecab-ipadic-neologdを確認して、パスが /usr/lib/mecab/dic/mecab-ipadic-neologd
なっていたらそのままお使いください。(適宜ここ2行は環境に合わせてください)
参考 : Pythonの環境管理ツール良し悪し
最後に
何かを入れて使うということは"入れる意味がある"はずなので、
たまには脳みそを使って意味を考えたり調べたりするべきだと思いました。
これはあくまで僕の環境下で且つ僕の思想なので、これが必ずしも正しいとは限らないし、
anacondaを使わなければならない事例も出てくるはずなので、
すごいニッチな記事になりましたが参考になれば幸いです。
また、もっとこういうことを考えたほうがいいとか、お前はまだまだだなどあれば、ご教授して頂けると幸いです。