31
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

機械学習のためのPython環境構築 2018.05

Last updated at Posted at 2018-05-10

2018.05.10 公開

本稿の趣旨

  • Pythonを触ったことがない人でも読める
  • Mid-2018 に対応したPython環境構築手順メモ
  • 方針
    • pipenv を使おう
    • pyenv は原則使わない
      • Python 2 系は原則使わない
    • anaconda も使わない

はじめに

近年の機械学習ブームにより、ノン・プログラマーがPython環境の構築にチャレンジする機会も増えていることと思います。しかし、特に機械学習向けのPython環境を構築する方法に関しては、ここ数年で急速に整備が進んだこともあり、良質な情報と古い情報が混在してしまっています。
そこで、2018年5月現在の状況に対応した環境構築(python3、pipenvによるパッケージ管理、主なモジュールのインストール)を極力簡潔にまとめることを目指しました。
なお筆者は初学者のため、怪しい点も多々あるかと思います。ツッコミ等大歓迎です。

1. 筆者の環境

OS: Ubuntu 16.04 で動作確認をしています。

2. Python 3 のインストール

Ubuntuにはシステム用のPythonが既にインストールされているはずです。
早速ターミナルを開き、確認してみましょう。

$ python --version
Python 2.7.12
$ python3 --version
Python 3.5.2

Python2系とPython3系の2種類がインストールされていることがわかります。これらには互換性がないため、気をつけて使いましょう。これからPythonを使いはじめる方は、Python3系のみを扱うこととなるでしょう。(Python 2系は2020年にサポートが終了します。)

3. 仮想環境・パッケージ管理

3.1 何を使うべきか

Pythonには、多くのパッケージをインストールすることで機能を追加していくことができます。プロジェクトごとに異なるパッケージを用いる場合、導入パッケージの異なる複数の環境を持つことができると便利です。これを実現できる機能が仮想環境です。
仮想環境を実現するための方法はpyenv, venv, virtualenv等いくつかあり、混乱のもととなっていましたが、Python 3.3 以降はvenvがPython標準機能として組み込まれています。

また、Pythonでは多くのパッケージをインストールすることで機能を追加していくことができますが、インストール・管理を支援するツールとして、Python 3.4 以降はpipが標準で組み込まれています。

venvとpipを組み合わせて一層使いやすくしたソリューションとして、現在pipenvがPython.org推奨として提供されており、これからの環境構築はこれを使うのが最適と考えられます。
公式機能が弱かった時代に作られたpyenvやconda等の公式外ツールは、今でも多くの人に使われていますが、必須ではなくなってきています。1

3.2 pipenvのインストール

それでは、pipenvを入れていきましょう。

$ pip install --user pipenv

--userをつけることで、ユーザーディレクトリにインストールされ、システムの環境を壊すリスクが低減できます。

$ pipenv --version
pipenv, version 11.10.4

インストールできました。

3.3 pipenvの使い方

3.3.1 仮想環境の立ち上げ

hogeという仮想環境を作ってみましょう。

$ mkdir hoge  # hogeフォルダを作る
$ cd hoge  # hogeフォルダに移動
~/hoge$ pipenv install  # 仮想環境 作成

これで、hogeフォルダにPipfilePipfile.lockというファイルができたはずです。前者がこの環境の設定ファイル、後者がパッケージリストになっています。

$ ls
Pipfile  Pipfile.lock

中身をのぞいてみましょう。

$ cat Pipfile
[[source]]
verify_ssl = true
url = "https://pypi.org/simple"
name = "pypi"

[packages]

[requires]
python_version = "3.5"

[dev-packages]

Pipfileにはpython_versionが記載されています。Python 3.5が指定されています。

$ cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "f05f9e300c88030ff492b1c6c019990ad9d8656221ef7c28e7636a2f86a79791"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.5"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {},
    "develop": {}
}

Pipfile.lockはjsonになっています。パッケージを入れていないので空の状態です。

さて、pipenv shellで仮想環境内のshellを起動します。
Pipfileのとおり、デフォルトではPython 3系の環境になります 2 。もちろんpipもこの環境にひも付きます。

$ pipenv shell
(hoge-qr0Xjim8)$ python --version
Python 3.5.2
(hoge-qr0Xjim8)$ pip --version
pip 10.0.1 from /home/(user)/.local/share/virtualenvs/hoge-qr0Xjim8/lib/python3.5/site-packages/pip (python 3.5)
(hoge-qr0Xjim8)$ exit # shellから抜ける
$

3.3.2 パッケージのインストール

パッケージ管理もpipenvで行われます。pipをご存知な方は、pipを使うようにpipenvを使うことができます。
インストールはpipenv install [package]でOKです。

NumPyをインストールする場合
$ pipenv install numpy
Installing numpy…
Collecting numpy
  Downloading https://files.pythonhosted.org/packages/7b/61/11b05cc37ccdaabad89f04dbdc2a02905cf6de6f9b05816dba843beed328/numpy-1.14.3-cp35-cp35m-manylinux1_x86_64.whl (12.1MB)
Installing collected packages: numpy
Successfully installed numpy-1.14.3

Adding numpy to Pipfile's [packages]…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (17cf22)!

…………けっこう時間かかりましたよね? 公式でもこの問題は認識しているようです3

パッケージ追加のたびにこれだけの時間がかかるのは耐えられないので、--skip-lockオプションをつけましょう。寝る前など時間のある時にpipenv lockでlockファイルを生成するのがよいでしょう。美しくないですが、現状はやむをえないようです。(Pipfileの方は更新されます。)

NumPyをインストールする場合(lockファイル更新はスキップ)
$ pipenv install numpy --skip-lock
$ pipenv lock  # とても遅い

インストールされているパッケージの確認は次のコマンドでできます。

$ pipenv graph
numpy==1.14.3

4 機械学習向けの構成例

どのパッケージをインストールするかはもちろん個人個人が選べばいいのですが、いわゆる定番とされるパッケージがいくつかあるため、構成例を提示します。

4.1 Jupyter Notebook

Jupyter NotebookはPythonコードを含んだ実験ノートのようなものを作ることができます。機械学習分野ではデファクトスタンダードになっています。

$ pipenv install jupyter --skip-lock

次のコマンドでノートブックサーバを起動します。

$ pipenv shell
(~)$ jupyter notebook

Jupyter Notebookの使い方については多くの情報があるためここでは触れませんが、NumPyが使えるかだけ確認してみます。

test.ipynb
> import numpy as np
> ar = np.asarray([1,2,3])
> ar
array([1, 2, 3])

動きました。

4.2 定番ライブラリ

機械学習における定番ライブラリをざっくりまとめてみました。
それぞれの詳細については、まとまった資料がいくつもあるので割愛します。

  • 基本パッケージ
    • NumPy : 数値計算ライブラリ(ベクトル計算・行列計算)
    • SciPy : 科学計算ライブラリ(NumPyも自動で入ります)
    • matplotlib : グラフ描画ライブラリ
    • pandas : データフレームを扱うためのライブラリ
    • flake8 : コードチェッカー
  • 機械学習用パッケージ
    • scikit-learn : 基本的な機械学習
  • Deep Learning フレームワーク
    • TensorFlow : Google謹製
      • Keras : 主にTensorFlowを使いやすくする
    • MXNet :
      • Gluon : Amazon, Microsoft謹製、MXNetを使いやすくする
    • Caffe : 初期のフレームワーク、現在も広く使われる
    • Caffe2 : Facebook謹製。
    • Chainer : 和製ライブラリ、Define by Run の提唱者
    • PyTorch : Chainerのフォーク、Define by Run で書ける

おわりに

類似の記事も多い中、私個人の事例紹介という形でご参考いただければ幸いです。
こみいった部分は極力排除しましたが、必要に応じて適宜加筆・修正したいと思っています。

参考資料

最近のPython環境構築

pipenv

Deep Learning ライブラリ

  1. かつてはSciPyを入れるだけでも、condaを使わないとコンパイルが必要だったそうです。今ではpipで一発で入ります。

  2. --python 2のようにバージョンを指定することができます。(そのバージョンのPythonがインストール済である必要があります。)

  3. 依存関係グラフを再生成するために、パッケージ全体をダウンロードしてsetup.pyをクロールしているようです。ハッシュ生成にも時間がかかっているようです。

31
44
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?