既存のConda環境を.ymlファイルで更新する方法


136

既存のconda環境を別の.ymlファイルで更新するにはどうすればよいですか。これは、複数の要件ファイル(つまりbase.yml, local.yml, production.yml、など)があるプロジェクトで作業するときに非常に役立ちます。

たとえば、以下はbase.ymlconda-forge、conda、およびpipパッケージを含むファイルです。

base.yml

name: myenv
channels:
  - conda-forge
dependencies:
  - django=1.10.5
  - pip:
    - django-crispy-forms==1.6.1

実際の環境は次のように作成されます conda env create -f base.yml

後で、追加のパッケージをに追加する必要がありますbase.yml。別のファイル、たとえばlocal.yml、これらの更新をインポートする必要があります。

これを達成するための以前の試みは次のとおりです。

local.ymlインポート定義を含むファイルを作成します。

channels:

dependencies:
  - pip:
    - boto3==1.4.4
imports:
  - requirements/base. 

次に、コマンドを実行します conda install -f local.yml

これは動作しません。何かご意見は?


現在アクティブ化されている環境を更新することはできますか?私はこれを試しましたが、更新はymlファイルで指定された環境に行きました。
ソレン

回答:


201

conda env updateを使用してみてください:

conda activate myenv
conda env update --file local.yml

または、環境をアクティブにする必要なし(@NumesSanguisに感謝):

conda env update --name myenv --file local.yml

12
-fとの間の等号は必要ありませんfile.yml。等号を削除すると、.ymlファイル名のタブ補完が機能します。
BallpointBen 2018年

4
追加--name env_nameして、のname: fooタグを無視しlocal.ymlます。また、最初にmyenvをアクティブにする必要もありません。完全なコマンド:conda env update --name env_name --file local.yml From:stackoverflow.com/a/45525593/3399066のコメント
NumesSanguis

1
最新のcondaバージョンでは、「source activate myenv」の代わりに「conda activate myenv」を使用すると思います
teter123f

31

提案された答えは部分的に正しいです。--pruneオプションを追加して、environment.ymlから削除されたパッケージもアンインストールする必要があります。正しいコマンド:

conda env update -f local.yml --prune

--pruneフラグでさえ、pipにインストールされた依存関係を削除するには不十分です...
Jean Paul

そうだね。condaの依存関係は削除されると思いますが、pipにリストされている依存関係は削除されません
点滅

22

alkamidの答えは正しい方向にありますが、環境がすでにアクティブである場合、Condaは新しい依存関係のインストールに失敗することがわかりました。環境を非アクティブ化すると、最初にこれが解決されます。

source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!

4
condaは、現在アクティブな環境でない場合、どの環境を更新するかをどのようにして知るのですか?
Thomas Fauskanger、

5
@ThomasFauskangerを使用して明示的に指定できます-n <environment name>が、デフォルトでは、期待される環境で動作するようです(たぶん最新のアクティブ、または単にデフォルトの環境の選択)
Dave

18
@ThomasFauskanger condaによってエクスポートされている場合、環境の名前はYAMLファイルで指定されます。
トーマス

この質問の古いポイントは、異なる環境をyamlファイルで指定された環境に更新することだと思いました。
Giacomo

1
@ThomasFauskanger yamlファイルには環境名が含まれています
Abdulrahman Bres
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.