日常的にPythonを使用する際、CondaとPipは同じ意味で使われることがあります。
PIPとcondaはPythonのパッケージマネージャとして非常によく知られています。
この2つのツールの機能は一部重複していますが、それぞれ異なる目的で設計され、使用されるべきです。
ここでは、condaとpipの違いを包括的に表にしています。
Conda vs Pip – クイック比較
相違点|pip|コンダ | ||
多言語依存性 | サポートされていない | サポートされている |
パッケージのインストール|車輪の上でビルド|バイナリをダウンロード||。 | ||
パッケージの利用可能性 | 235,000パッケージ | 1,500以上のパッケージ |
依存関係管理|SATテストなし|SATテストを実行します。 | ||
仮想環境管理|仮想環境管理なし|仮想環境管理システム内蔵 | ||
ミニマリスト|イエス|ノー |
表1: pipとcondaの違いの主なまとめこの2つのパッケージマネージャの違いについて詳しく知る前に、pipとcondaの基本情報をいくつか知っておきましょう。
PIPとは?
PipはPythonのパッケージをインストールするためのシンプルなコマンドラインツールです。
Python Package Index(PyPI)で公開されている全てのPythonパッケージからパッケージをインストールするための標準的かつ推奨される方法です。
Python 3.4 (or higher) を使っていて python.org からダウンロードしている場合、または virtualenv や venv で作られた仮想環境で作業している場合は、すでに pip がインストールされた状態になっています。
コンダとは?
Conda はパッケージ、依存関係、環境管理システムで、元々は Python 用に開発されましたが、後に Python, R, Java, Scala, FORTRAN, C/C++ などの言語で使用できるように拡張されました。
パッケージのインストール、更新、削除、および依存関係の処理を簡単に行う方法を提供します。
デフォルトの設定では、condaは標準の言語固有のリポジトリではなく、Condaの公式リポジトリからパッケージをインストールします。
さて、2つのパッケージ管理システムの基本的な考え方がわかったところで、この2つのマネージャの重要な違いについて見ていきます。
1. Python 以外の依存関係の処理
先に学んだように、CondaはPython以外の言語もサポートしています。
これは些細なことに思えるかもしれませんが、依存関係の管理に関しては非常に強力で、必要とされている機能です。
Python パッケージは Python 以外の言語で書かれたプログラムやパッケージに依存することがあります。
PipはLLVMやHDF5のようなPython以外の依存関係を適切に処理することができません。
HDF5 などのような Python 以外の依存関係を適切に扱うことができません。
これはある種のパッケージの破壊につながるかもしれません。
つまり、Condaは依存関係の処理においてpipより一歩進んでいることがわかります。
2. パッケージのインストール
この2つのパッケージのインストール方法には、非常に重要な違いがあります。
PyPIにあるPythonパッケージはwheelやソースディストリビューションとしてパッケージングされています。
これは、パッケージを使用する前に、ローカルマシンでコンパイルする必要があることを意味します。
パッケージのコンパイルには、pipコマンドを実行する前に、互換性のあるコンパイラとライブラリがローカルマシンにインストールされていることが必要です。
一方、CondaはAnacondaのリポジトリとクラウドからダウンロードされるコンパイル済みのバイナリを使用します。
このアプローチにより、コンパイラやライブラリの依存関係の問題から解放されたインストールプロセスが実現します。
3. パッケージの可用性
パッケージングとインストールというアプローチはどちらも有効で、それぞれに利点と欠点があります。
Conda はインストールを簡単にし、ユーザーエクスペリエンスを最適化します。
一方 pip は、そうでなければ不必要に全てのプラットフォーム用にパッケージをコンパイルすることを強いられたであろう開発者にとって、パッケージのメンテナンスをより簡単にします。
パッケージのコンパイルは、時間的にも空間的にもコストがかかります。
PyPIでは多くのパッケージ(15万以上)が公開され、メンテナンスされています。
これらのパッケージの中には、個人的なプロジェクトやニッチなユーザベースを持つパッケージもあります。
Condaは残念ながらPyPIに存在する全てのパッケージをサポートしていません(できません)。
Condaのリポジトリとクラウドには、主に科学計算と機械学習に焦点を当てた約1,500以上のパッケージが含まれています。
パッケージの可用性の違いは本当に明らかで、パッケージの可用性という点ではpipが圧倒的に優れたパッケージマネージャです。
注:Condaに存在しないパッケージをインストールするには、任意のConda環境内でpipを使用することができます。
PipとCondaは同時に使用することができますが、通常は推奨されません。
4. 依存関係の管理
pip と conda の最も重要な違いは、依存関係の問題をどのように解決するかです。
Pip は依存関係のインストールに再帰的、直列的なループを使用します。
Pip は、すべてのパッケージの依存関係が同時に満たされていることを確認することはありません。
もし、先にインストールされたパッケージが、後からインストールされたパッケージと相対するバージョンと互換性のない依存関係を持つと、環境は壊れ、最も重要なことは、この問題が、あなたが奇妙なエラーを見つけるまで検出されないままであることです。
Conda はこの問題を満足度ソルバー (SAT) を使って解決し、環境にインストールされたすべてのパッケージのすべての要求が満たされているかどうかを検証します。
このチェックは余分な時間がかかることがありますが、壊れた環境の作成を防ぐのに役立ちます。
依存関係についてのパッケージのメタデータが正しい限り、 conda は動作する環境を予測可能な形で生成します。
ですから、依存関係の管理に関しては、一般的に conda の方が良い選択です。
5. 仮想環境の管理
先に述べたようにpipはパッケージを管理するための小さなツールに過ぎません。
Conda はそれ以上のものを提供します。
ビルトインされた仮想環境マネージャが付属しています。
pipでは、仮想環境を作成するためにpipenvやvirutalenvのようなプログラムが必要です。
これはpipをパッケージ管理のみに集中させ、肥大化させないための設計上の決定です。
pipとこれらの環境マネージャのいずれかを使用することで、仮想環境を効率的に作成・管理することができます。
Condaは、すぐに使える仮想環境マネージャーを提供しています。
virutalenv や pipenv のような仮想環境の機能を提供するだけでなく、それぞれの仮想環境の python のバージョンを選択することができます。
この機能は、古いパッケージや低いバージョンのpythonでしか利用できないパッケージの使用を容易にするのに役立ちます。
6. ミニマリズム
Pipはたった一つのことを行うことを目的としたシンプルなコマンドラインツールです。
シンプルでモジュール化された、ミニマリスト的な設計になっています。
一方、Condaは簡単でオールインワンのソリューションを提供するために設計されました。
これはpipの代替的なアプローチとなることを意図しています。
そのアプローチにおいて、Condaは全くミニマルではありません。
Condaにはたくさんのプリインストールされたパッケージやソフトウェアが付属しています。
ミニマルでないアプローチは、一部のユーザーにとっては望ましくない機能かもしれません。
Conda はこの点を克服するために、Conda の小型版である Miniconda を提供しようとしています。
Miniconda は conda のすべての機能を提供しますが、conda のセットアップに必要な最小限のパッケージのみをインストールします。
この記事もチェック:Pythonのコマンドライン引数でargparseやgetoptを使う方法
結論 – Conda vs Pip
これで、pipとcondaに関するこの記事は終わりです。
Pythonに関するこのような記事をこれからも楽しみにしていてください。