pip installとconda installの比較
Anaconda環境で作業する場合、pip installとconda installの違いを理解していないと競合が起こり環境が壊れてしまう場合があります。
この記事では、競合が原因で環境が壊れてしまうことがないようpip installとconda installの違いについて調べたものを、備忘録として共有しようと思います。
pipとは
Python開発元であるPython SoftWare Foundationが提供するPythonパッケージの配布サービスにPyPi (Python Package index) というものがあります。pipとは、このPyPiを利用する際の標準パッケージ管理コマンドです。pipを使用することでパッケージのダウンロード・インストールなどを行うことができます。
Pythonを用いたプログラミング(科学技術計算と関係がないもの)ではpipが使用されます。そのため一般書籍ではpipコマンドを使用したパッケージインストールが記載されている場合が大半となっています。
condaとは
科学技術計算などで用いられるAnacondaでは、パッケージはAnaconda Cloud上で提供されます。condaとは、Anaconda Cloudにアクセスし、パッケージのダウンロード・インストールを行うための標準パッケージ管理コマンドです。
Anacondaは、科学技術計算で利用されるサービスとして、Pythonとは関係性のないソフトウェアの提供も行っています。そのためpipコマンドではなく、独自のcondaコマンドが用意されています。
pipとcondaの比較
pipとcondaの違いについてはAnaconda公式の表がわかりやすいと感じたので引用させていただきました。
pip | conda | |
---|---|---|
manages | wheel or source | binaries |
can require compilers | yes | no |
package types | Python only | any |
create enviroment | no, requires virtualenv or venv | yes, built in |
dependency checks | no | yes |
package sources | PyPi | Anaconda repo and cloud |
pipとcondaが競合する理由
pipとcondaは共に独立してパッケージの管理を行います。ゆえにpipでインストールしたパッケージをcondaは把握していません。この逆も同様です。
またpipは、パッケージインストールが行われた際、他のパッケージとの依存関係を自動的に良好に保つよう働く機能を持ちません(pipではインストールを行う前にパッケージの依存関係をチェックしておく必要がある)。これにより、pipとcondaではパッケージの依存関係の管理に不具合が生じる場合があるというわけです。
pipとcondaの使い分け方
Anacondaを使用する場合はcondaコマンド、使用しない場合はpipコマンドとするのが一般的です。Anaconda環境下では、conda search
コマンドなどで必要なパッケージを検索してcondaコマンドでインストールができないかどうかを検討することがセオリーとなります。
どうしてもAnaconda環境下でpipコマンドを使いたいという場合には、現在使用している仮想環境のコピー環境を作成し、その環境でpipコマンドを利用したパッケージインストールのテストを行うことをおすすめします。
競合の可能性がある場合
競合が生じていないかを確認するには、使用中のAnaconda環境下でconda list
を使う方法があります。パッケージが重複して並んでいるもののうち、一番右にpypiとあればそれがpipにてインストールされたパッケージです。condaでインストールされたものは一番右が空欄になります。
pip installされたものとconda installされたものが存在し、それが原因で競合が生じている場合にはAnaconda自体をアンインストールする必要があります。