CONDA環境でPIPを排他的に使用することの落とし穴は何ですか?

Dec 02 2020

バックグラウンド

同じWebサイトの公式ドキュメントとこのブログ-pipを使用してcondaできるだけ多くの要件インストールすることをお勧めします。どうやらこれは、condaによって行われた依存関係への変更を認識しないため、依存pip関係を正しく解決できないためです。

質問

今1排他的に使用している場合pipとは、と何もインストールせずに行くconda、予想するのが妥当と思われるcondaが行った変更を意識する必要がないpip-などのconda効果的分離株の依存関係を単なる道具になり、バージョンを管理します。ただし、を使用してできるだけ多くの要件をインストールしcondaないため、これは公式の推奨事項に反します

したがって、疑問が残ります。環境で排他的に使用pipすることによる既知の欠点はありcondaますか?

同様のトピック

の同様のトピックはここで少し触れられていますがpipconda環境で排他的に使用する場合については説明していません。私もここにいました:

  • Pythonパッケージをインストールするときにpipとcondaを優先する具体的な理由
  • pipとcondaの違いは何ですか?
  • Pipを使用してAnaconda環境にパッケージをインストールする

回答

2 merv Dec 02 2020 at 03:49

これについて包括的な答えを出すことができるかどうかはわかりませんが、頭に浮かぶ主なことのいくつかは次のとおりです。

  1. Python以外の依存関係の解決に対する深いサポートの欠如。Python以外のリソースをバンドルするホイールが徐々に利用できるようになりましたが、Python固有ではなく、一般的なパッケージマネージャーであるためにCondaが提供するカバレッジにはほど遠いです。相互運用可能なコンピューティングを行う人(たとえばreticulate)にとって、私はCondaが支持されることを期待します。

  2. 最適化されたライブラリ。最初のポイントに関連しているようですが、Anacondaチームは、パッケージの最適化されたバージョン(MKL forなどnumpy)を構築するために努力しました。同等のものがPyPIを通じて利用可能かどうかはわかりません。1

  3. 環境全体の無駄な冗長性。Condaは、パッケージと環境が同じボリューム上にある場合にハードリンクを使用し、ボリュームにまたがるソフトリンクをサポートします。これにより、複数の環境にインストールされているパッケージの複製を最小限に抑えることができます。

  4. エクスポートが複雑になります。エクスポートするとき(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]他にご存知の場合は、誰かが私を訂正してください。