Cara memperbarui lingkungan Conda yang ada dengan file .yml

139

Bagaimana lingkungan conda yang sudah ada diperbarui dengan file .yml lain. Ini sangat membantu saat mengerjakan proyek yang memiliki beberapa file persyaratan, misalnya base.yml, local.yml, production.yml, dll.

Misalnya, di bawah ini adalah base.ymlfile yang memiliki paket conda-forge, conda, dan pip:

base.yml

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

Lingkungan yang sebenarnya dibuat dengan: conda env create -f base.yml.

Nanti, paket tambahan perlu ditambahkan ke base.yml. File lain, misalnya local.yml, perlu mengimpor pembaruan tersebut.

Upaya sebelumnya untuk mencapai ini termasuk:

membuat local.ymlfile dengan definisi impor:

channels:

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

Dan kemudian jalankan perintah: conda install -f local.yml.

Ini tidak bekerja. Ada pemikiran?

tilikoom
sumber
Apakah mungkin untuk memperbarui lingkungan yang saat ini diaktifkan ?? Saya baru saja mencoba ini tetapi pembaruan pergi ke lingkungan yang disebutkan dalam file yml.
Sören

Jawaban:

203

Coba gunakan pembaruan conda env :

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

Atau tanpa perlu mengaktifkan lingkungan (terima kasih @NumesSanguis):

conda env update --name myenv --file local.yml
alkamid
sumber
12
Anda tidak membutuhkan tanda sama dengan antara -fdan file.yml. Menghapus tanda sama dengan akan membuat penyelesaian tab bekerja pada .ymlnama file.
BallpointBen
4
Tambahkan --name env_nameuntuk mengabaikan name: footag apa pun di local.yml. Juga mencegah kebutuhan untuk mengaktifkan myenv terlebih dahulu. Perintah lengkap: conda env update --name env_name --file local.yml Dari: stackoverflow.com/a/45525593/3399066 's komentar
NumesSanguis
1
Dalam versi terbaru conda saya pikir kami menggunakan "conda aktifkan myenv" daripada "sumber aktifkan myenv"
teter123f
32

Jawaban yang disarankan sebagian benar. Anda harus menambahkan opsi --prune untuk juga menghapus paket yang telah dihapus dari environment.yml. Perintah yang benar:

conda env update -f local.yml --prune
Berkedip
sumber
Bahkan bendera --prune tidak cukup untuk menghapus dependensi yang diinstal pip ...
Jean Paul
Benar. Saya pikir itu akan menghapus dependensi conda tetapi bukan yang terdaftar di bawah pip
Blink
22

jawaban alkamid ada di baris yang benar, tetapi saya telah menemukan bahwa Conda gagal menginstal dependensi baru jika lingkungan sudah aktif. Menonaktifkan lingkungan pertama-tama menyelesaikan ini:

source deactivate;
conda env update -f whatever.yml;
source activate my_environment_name; # Must be AFTER the conda env update line!
Dave
sumber
4
Bagaimana conda mengetahui env mana yang akan diupdate jika bukan yang sedang aktif?
Thomas Fauskanger
5
@ThomasFauskanger Anda dapat menentukannya secara eksplisit -n <environment name>, tetapi secara default tampaknya bekerja dengan lingkungan yang diharapkan (mungkin yang paling baru aktif, atau hanya pilihan lingkungan default)
Dave
18
@ThomasFauskanger Nama lingkungan ditentukan dalam file YAML jika telah diekspor oleh conda.
Thomas
Saya pikir poin lama dari pertanyaan ini adalah memperbarui lingkungan yang berbeda dengan yang ditentukan dalam file yaml.
Giacomo
1
@ThomasFauskanger file yaml menyertakan nama lingkungan
Abdulrahman Bres