Anaconda環境で作業する場合、pip installとconda installの違いを理解していないと競合が起こり環境が壊れてしまう場合があります。
この記事では、競合が原因で環境が壊れてしまうことがないようpip installとconda installの違いについて調べたものを、備忘録として共有しようと思います。
また、Jupyter Notobookで”No module named”が生じた場合の解決方法についてもおまけで付けてあります。
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自体をアンインストールする必要があります。また場合によってはAnaconda Promptが動かないこともあるかもしれません。その際にはAnaconda-Cleanが使用できないので、コントロールパネル
Jupyter NotebookでNo module namedなどが生じた場合
“No module named”などのエラー原因としては「指定したモジュールが存在しない」「指定したモジュールが未インストールである」などが挙げられます。この場合、基本的にはパッケージインストールを行うなどしてエラーを解消することとなります。
手っ取り早い方法としてはJupyter Notebook上でコマンドラインを実行してしまう方法です(先頭に!
を付ければJupyter Notebook上でもコマンドラインとしての実行が可能)。
#pipを使用する場合
!pip install sklearn
conda
コマンドを使用する場合にはyes/no入力が必要となるため以下のようにしてください。
#condaを使用する場合
!echo y|conda install sklearn
Anaconda環境下でJupyter Notebookを使う場合、もっと根本的な原因としてそもそも仮想環境にJupyter Notebookを置いていないという可能性もあります。その場合には以下のようにすれば仮想環境上にインストールできます。
conda install jupyter notebook
コメント