CONDA環境でPIPを排他的に使用することの落とし穴は何ですか?
バックグラウンド
同じWebサイトの公式ドキュメントとこのブログ-pipを使用してconda
、できるだけ多くの要件をインストールすることをお勧めします。どうやらこれは、conda
によって行われた依存関係への変更を認識しないため、依存pip
関係を正しく解決できないためです。
質問
今1排他的に使用している場合pip
とは、と何もインストールせずに行くconda
、予想するのが妥当と思われるconda
が行った変更を意識する必要がないpip
-などのconda
効果的分離株の依存関係を単なる道具になり、バージョンを管理します。ただし、を使用してできるだけ多くの要件をインストールしconda
ないため、これは公式の推奨事項に反します。
したがって、疑問が残ります。環境で排他的に使用pip
することによる既知の欠点はありconda
ますか?
同様のトピック
の同様のトピックはここで少し触れられていますがpip
、conda
環境で排他的に使用する場合については説明していません。私もここにいました:
- Pythonパッケージをインストールするときにpipとcondaを優先する具体的な理由
- pipとcondaの違いは何ですか?
- Pipを使用してAnaconda環境にパッケージをインストールする
回答
これについて包括的な答えを出すことができるかどうかはわかりませんが、頭に浮かぶ主なことのいくつかは次のとおりです。
Python以外の依存関係の解決に対する深いサポートの欠如。Python以外のリソースをバンドルするホイールが徐々に利用できるようになりましたが、Python固有ではなく、一般的なパッケージマネージャーであるためにCondaが提供するカバレッジにはほど遠いです。相互運用可能なコンピューティングを行う人(たとえば
reticulate
)にとって、私はCondaが支持されることを期待します。最適化されたライブラリ。最初のポイントに関連しているようですが、Anacondaチームは、パッケージの最適化されたバージョン(MKL forなど
numpy
)を構築するために努力しました。同等のものがPyPIを通じて利用可能かどうかはわかりません。1環境全体の無駄な冗長性。Condaは、パッケージと環境が同じボリューム上にある場合にハードリンクを使用し、ボリュームにまたがるソフトリンクをサポートします。これにより、複数の環境にインストールされているパッケージの複製を最小限に抑えることができます。
エクスポートが複雑になります。エクスポートするとき(
conda env export
)Condaは、pip
インストールされているすべてのパッケージを取得するわけではなく、PyPIからのパッケージのみを取得します。つまり、GitHubなどからインストールされたものを見逃してしまいます。pipのみのルートを使用した場合pip freeze > requirements.txt
、より信頼性の高いエクスポート戦略は、を使用して、次のようなYAMLを作成することだと思います。channels: - defaults dependencies: - python=3.8 # specify the version - pip - pip: - -r requirements.txt
環境を再現するために使用します。
そうは言っても、一部の人々(ほとんどは便利な人々)、特に純粋にPythonで作業する傾向がある人々にとって、これらの問題はどれも重要ではないことは容易に想像できます。ただし、そのような場合、なぜCondaを完全に放棄して、Python固有の仮想環境マネージャーを使用しないのかわかりません。
[1]他にご存知の場合は、誰かが私を訂正してください。