conda installとpip installの違い。機能の比較など【Python】

2019年5月26日

今までpip installはconda installが使えないときの代用というくらいにしか認識していませんでした。欲しいパッケージがAnaconda社のリポジトリにない場合はpipでインストールしてたところ、ある時これらの競合が原因で環境が壊れてしまいました。

Jupyter Notebookが起動しないと思ったらAnaconda環境が壊れていた

せっかくの機会でしたのでpipとcondaの違いを調べてみたので、以下に備忘録として残しておきます。

condaとpipの違い

Condaとは

一言で表すとAnaconda/Minicondaに標準で付属しているパッケージマネージャーであり、環境管理システム。

Anacondaとは、データサイエンス用向けのパッケージ群を提供するプラットフォーム( condaとpipの違いを調べに来ている方であればすでにご存じと思います)。 PythonやRなどのデータサイエンス向けプログラミング言語や、統計解析・機械学習に必要なパッケージを一括でインストールでき、すぐにPythonを利用する環境を構築できる。
最小限の構成しかないのはMinicondaというのもある。

condaはAnacondaインストーラーかminicondaインストーラーによってインストールされたときのみ動作します。 python+pipの環境にcondaをインストールしてもAnacondaディストリビューション上のように使うことはできません。

pipとは

純粋なpythonをインストールするとついてくる、python標準のパッケージインストーラー& パッケージ管理システム。

Pythonプログラミング言語用のリポジトリであるPython Package Index(PyPI)からパッケージをダウンロード・インストールしてくれます。

それぞれの機能の違い

condaとpipの役割をかんたんな表にまとめました。

機能condapip
パッケージのインストール・管理
Pythonバージョンの切替不可 (pipenv, pyenvで代用)
仮想環境の管理不可 (pipenv, virtualenv, venvで代用)

condaは環境管理システムでもあるため、仮想環境を構築したり、Pythonのバージョンを3.7にしたり、2.7に切り替えたりできます。

pipでは、pyenv(バージョン管理)やvenv(仮想環境管理)などのパッケージをインストールして使うことになります。

最近はpipenvというのが出てきて、こちらはほぼcondaの代替となるような機能を備えているみたいです。

conda installとpip install

conda installとpip installは、コマンドはほとんど似ていますが、パッケージをインストールする仕組みは結構異なるようです。anaconda.comのサイトにわかりやすい比較表があったので、引用させていただきます(日本語&自分が理解しやすいように改変しています)。

conda installpip install
パッケージ形式バイナリwheel or source
コンパイル不要必要
パッケージタイプ他言語も可pythonのみ
仮想環境の管理、バージョンの管理可能不可 (virtualenv, venvで代用)
依存関係のチェックありなし
パッケージのダウンロード元anacondaリポジトリ、anacondaクラウドPyPl

・condaはpython以外の言語にも対応

Anaconda/Minicondaは、Python・R・Ruby・Java・JavaScript・C / C ++・FORTRANなど複数のプログラミング言語や、それらのパッケージをインストールすることができるクロスプラットフォームです。

condaは、そのクロスプラットフォーム上でさまざまな言語で書かれたソフトウェア・パッケージをインストールできます。

pipがインストールできるのはPythonパッケージのみです。

・コンパイルが必要かどうか

condaコマンドでインストールできるパッケージは、Anaconda cloudという専用のリポジトリに1000個以上も保存されています。

これらのパッケージはコンパイル済みのバイナリファイルであるため、コンパイラ不要でダウンロード・インストールできる。

pipでインストールするファイルにはソースファイルが含まれているため、クライアント側でコンパイルする必要が生じます。

これにより環境によっては問題が起こる場合があり、環境構築で躓くことが多い原因の一つと思われます。かもしれません。それは外部の依存関係を必要とするかもしれません。

・依存関係チェックの有無

pipではパッケージインストールの際に、都度すべての依存関係が同時に満たされるようにはしていないようです。この場合、インストールしたパッケージ間でそれぞれが依存するパッケージのバージョンが異なると衝突が起こってしまいます。

condaでは全パッケージのメタデータを収集して依存関係を把握するSAT solverというものを備えており、これに対応しています。 インストールの際は、 パッケージ間の複雑な依存関係を素早く把握し、適切な更新・インストールを行います。

・実行速度の違い

condaでインストールしたnumpyによる行列演算のほうが早いという情報もありました。計算の種類にもよりますが、2倍以上も差が出るみたいです。

NumPyで呼び出される行列演算を実際に担うBLAS (Basic Linear Algebra Subprograms)というものには様々な実装法が存在しているのですが、その一つがIntel社が開発しているIntel MKL(Math Kernel Library)となります。実はAnacondaによってインストールされたNumPyから呼び出されるBLASはMKLになっていますが、pipでNumPyをインストールした場合には通常はOpenBLASというBLASが使われるため、ここで性能に差が出る可能性があるわけです。

AnacondaのNumPyとpipによるNumPyの速度の違い-Orizuru

BLASは基本的な行列やベクトル計算を行うライブラリとあります。numpyライブラリの中にさらにライブアリがあってよくわかんなくなってきます…。

「BLASの違いによって実際に計算処理の速度がどれくらい変わるか」や「自分の環境でどのBLASが使われているか調べる方法」は以下のページに詳しくまとめております。よろしければご参考ください。

Numpyに使われるBLASによって計算速度が変わるらしい【Python】

以上、condaとpipの違いでした。

参照


Understanding Conda and Pip
https://conda.io/en/latest/
AnacondaのNumPyとPyPIのNumPyの速度を比較する
Stop Installing Tensorflow using pip for performance sake!