Condaはvirtualenvの必要性を置き換えますか?


205

SciPyのインストールで問題が発生した後、特に開発中のHerokuアプリでCondaを最近発見しました。

Condaを使用して、virtualenvと同じように環境を作成します。私の質問は:

  1. Condaを使用すると、virtualenvの必要性が置き換えられますか?そうでない場合、どうすれば2つを一緒に使用できますか?virtualenvをCondaにインストールしますか、それともvirtualenvにCondaをインストールしますか?
  2. それでもpipを使用する必要がありますか?その場合でも、分離された環境でpipを使用してパッケージをインストールできますか?

あなたは、Herokuの上condaとピップを使用してに興味があるなら、例えばを参照github.com/faph/conda-pip-buildpack
faph

ありがとう。githubにHerokuのcondaビルドパックがたくさんあることに気づきました。使用するビルドパックを決定する際に考慮すべき要素は何ですか?
クリッツ

Continuumのサーバーから直接入手できないパッケージをインストールする場合は、pipを使用する必要があることに注意してください。
ali_m

はい、私は彼らがまだDjango 1.8(1.9ではない)にいるのを見ました。現時点では、必要な場所(scipyとnumpy)でcondaを使用し、他のすべての場合はpipを使用しますが、まだconda内にあります。
クリッツ

ほとんどのconda Herokuビルドパックは、Kenneth Reitzによるものだと思います。人々が彼らの好みに合うようにそれらを微調整すると。必要な場合は、condaとpipの両方のサポートが含まれているかどうかを確認してください。そしてそれらがenvironment.ymlファイルをサポートするなら。たとえば、環境がどのように作成されるかを正確に確認するために、ビルドパックコードをいつでもすばやく確認して、ビルドスクリプトが好きかどうかを確認できます。
2015

回答:


157
  1. Condaはvirtualenvを置き換えます。私の意見では、それはより良いです。Pythonに限定されず、他の言語にも使用できます。私の経験では、特に科学的なパッケージの場合、それははるかにスムーズな経験を提供します。初めてMacにMayaViを正しくインストールしたのは、condaでした。

  2. 引き続き使用できますpip。実際、新しい環境ごとにcondaインストールさpipれます。それは、pipでインストールされたパッケージについて知っています。

例えば:

conda list

現在の環境にインストールされているすべてのパッケージを一覧表示します。Condaがインストールしたパッケージは次のように表示されます。

sphinx_rtd_theme          0.1.7                    py35_0    defaults

を介しpipてインストールされたものには<pip>マーカーがあります:

wxpython-common           3.0.0.0                   <pip>

8
Anaconda環境でpipを使用することの欠点はありますか?Condaからパッケージを入手できたとしても、pipを使用したいというケースはありますか?
クリフレイ

違いはハイフンとアンダースコアですか?パッケージ名にどちらもない場合はどうなりますか?それではどのように区別するのですか?
トム・ヘイル

1
アンダースコアまたはハイフンはパッケージ名の一部です。これは、pipやcondaとは関係ありません。<pip>それはピップと一緒にインストールされたことを示しているが、それ以外の場合はconda一緒にインストールされています。
マイク・ミュラー

4
「condaはpipでインストールされたパッケージについて知っている」という大きな警告があります。私の理解では、conda env内では、pipは独立して動作するため、たとえばcondaはpipがインストールされたパッケージをアンインストールできません
information_interchange

1
@clifgray-ネイティブ共有ライブラリを持つpipおよびcondaパッケージは、互換性のないバージョンのバイナリをインストールする可能性があり、Cデバッガーでスピードを上げられない人にとって、あらゆる種類のネイティブ世界の障害(sigsegv-sなど)のデバッグが困難になります。Pythonのみのパッケージでも同じですが、簡単に理解できます。
ボバ

61

短い答えは、コンダが必要なだけです。

  1. Condaはpipとvirtualenvの機能を単一のパッケージに効果的に組み合わせているため、condaを使用している場合はvirtualenvは必要ありません。

  2. condaがサポートするパッケージの数に驚くでしょう。それが十分でない場合は、condaの下でpipを使用できます。

conda、pip、virtualenvを比較するcondaページへのリンクは次のとおりです。

https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands


34

仮想環境と pip

Anaconda を使用すると、conda環境の作成削除が簡単になることを付け加えます。

> conda create --name <envname> python=<version> <optional dependencies>

> conda remove --name <envname> --all 

有効な環境を介してパッケージをインストールしますcondapip

(envname)> conda install <package>

(envname)> pip install <package>

これらの環境はcondaのpipのようなパッケージ管理に強く結びついているため、環境を作成してPythonパッケージと非Pythonパッケージの両方をインストールするのは簡単です。


ジュピター

さらに、環境にインストールするipykernelと、Jupyterノートブックの[カーネル]ドロップダウンメニューに新しいリストが追加され、再現可能な環境がノートブックに拡張されます。Anaconda 4.1以降、nbextensionsが追加されました、ノートブックに拡張機能をより簡単に追加できるようになりました。

信頼性

私の経験では、condaはやなどの大規模なライブラリをインストールする方がより高速で信頼性が高くnumpyなりpandasます。さらに、保存された環境の状態を転送したい場合は、envを共有または複製することで実行できます。


18

Condaをインストールすると、Python環境を希望どおりに作成および削除できるため、virtualenvと同じ機能が提供されます

両方のディストリビューションの場合、分離されたファイルシステムツリーを作成でき、Pythonパッケージを(おそらく、pipを使用して)インストールおよび削除できます。異なるユースケースで同じライブラリの異なるバージョンを使用したい場合や、何らかの配布を試みて、後でディスクスペースを節約して削除したい場合に、これは便利です。

違い:

ライセンス契約。virtualenvのは、最もリベラルの下に来る間にMITライセンスConda 3条項BSDライセンスを使用しています。

Condaは、独自のパッケージ制御システムを提供します。このパッケージ制御システムは、一般的なPython以外のソフトウェアのプリコンパイルされたバージョン(ほとんどの一般的なシステム用)を提供することがよくあります。これにより、機械学習パッケージを簡単に機能させることができます。つまり、システム用に最適化されたC / C ++コードをコンパイルする必要はありません。それは私たちのほとんどにとって大きな安心ですが、そのようなライブラリのパフォーマンスに影響を与える可能性があります。

virtualenvとは異なり、Condaは少なくともLinuxシステムで一部のシステムライブラリを複製します。このライブラリは同期が取れなくなり、プログラムの動作に一貫性がなくなります。

評決:

Condaは素晴らしく、機械学習を始める際のデフォルトの選択になるはずです。これは、gccと多数のパッケージをいじる時間を節約します。それでも、Condaはvirtualenvの代わりにはなりません。これは、常に望ましいとは限らない、いくつかの追加の複雑さをもたらします。それは別のライセンスの下にあります。分散環境またはHPCハードウェアでcondaを使用しないようにすることができます。


2
「分散環境やHPCハードウェアでcondaを使用したくない」理由についてもう少し詳しく説明しますか?@ y.selivonchyk
Oliver Hu

1
私はこれらの結論のいくつかに同意しません。「一貫性のないプログラムの動作」は、condaインストールされたソフトウェアとライブラリを使用するようにプログラムを適切に構成していないことが原因です。HPCではconda、多くの場合に推奨されますが、実際にはmoduleシステムなどを置き換えるためにHPC管理者によって使用されています。これにより、ユーザーがインストールしたソフトウェアと、より優れたソフトウェア分離が可能になります。HPCの2つの大きな問題です。私が経験する唯一の注意点は、多くのHPCファイルシステムには、dir内のファイル数にハード制限があり、condaは1,000個ものファイルを作成することです。
user5359531

9

私は両方を使用し、(2020年1月の時点で)いくつかの表面的な違いがあるため、使用方法が異なります。することで、デフォルト Conda virtualenvのは、現在のディレクトリ内のフォルダを作るのに対し、中央の場所にあなたのための環境のリストを管理することを好みます。前者(集中型)は、たとえば機械学習を行っており、多くのプロジェクトで使用する広範な環境がいくつかあり、どこからでもそこに飛び込みたい場合に適しています。後者(プロジェクトフォルダーごと)は、本当にプロジェクト自体に属しているlib要件の完全に異なるセットを持つ小さな1回限りのプロジェクトを実行している場合に意味があります。

Condaが作成する空の環境は約122MBですが、virtualenvは約12MBです。そのため、どこにでもConda環境を分散させたくない場合もあります。

最後に、Condaが一元化された環境を好むもう1つの表面的な兆候は、独自のプロジェクトフォルダーにConda envを作成してアクティブ化すると、シェルに表示される名前のプレフィックスが(長すぎる)絶対であることですフォルダへのパス。名前を付けることで修正できますが、virtualenvはデフォルトで正しいことを行います。

2つのパッケージマネージャーが優位を争うにつれて、この情報は急速に古くなると思いますが、これらは今日のトレードオフです:)


いい説明だ!それらの両方を使用していくつかの問題がありますか?使用したことがありpipenvますか?
Mikhail_Sam

8

別の新しいオプションと、環境を稼働させるための私の現在の推奨方法はPipenvです。

現在、Python.orgから公式に推奨されているPythonパッケージツールです。


1
これにより、「ええと、pipenvとは何ですか?」というプロンプトが表示され、reddit.com / r / Python / comments / 8jd6aq / sedimental.org/the_packaging_gradient.htmlが表示されました。私はまだ何を使うべきかわかりませんが、少なくとも私はよりよく知らされています。おもう。
マットウィルキー

イントロを見て、すぐにイントロダクションを読んだ後、pipenvはPythonバージョンを管理できないようです...
Carles

@CarlesAlcolea pipenvは、次の方法でもさまざまなバージョンを指定できますpipenv --two。Python2の場合とpipenv --three for python3の場合
Kurian Benoy

3

はい、condaはインストールよりもvirtualenvはるかに簡単で、後者をほとんど置き換えます。


6
Anacondaが仮想環境を置き換える場合、仮想環境のインストール手順を提供するのはなぜですか?
jmh 2017

1
@jmh Anacondaは仮想環境を置き換えません。Python固有の仮想環境管理ツールvirtualenvをより一般的な仮想環境管理ツールに置き換えますconda。また、AnacondaはCondaツールを含む単なるPython +ディストリビューションです。質問(および回答)はCondaのみに関するものです。
merv

3
この答えは何年も前に来た答えを超えて何も追加しません。
merv

1

私は、管理者のアクセス権のないマシンでいくつかのファイアウォールの背後にある企業で働いています

Python(2年間)の限られた経験で、pipを介してインストールするときにC ++依存関係エラーエラーをスローしたいくつかのライブラリ(JayDeBeApi、sasl)に遭遇しました。MicrosoftVisual C ++ 14.0が必要です。「Microsoft Visual C ++ Build Tools」で入手:http : //landinghub.visualstudio.com/visual-cpp-build-tools

これらはcondaでうまくインストールされたので、当時から私はconda envで作業を始めました。ただし、書き込みアクセス権がないc.programfiles内に依存関係をインストールすることからcondaを停止するのは簡単ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.