Anaconda mengekspor file Lingkungan

129

Bagaimana cara membuat file lingkungan anaconda yang dapat digunakan di komputer lain?

Saya mengekspor lingkungan python anaconda saya ke YML menggunakan conda env export > environment.yml. Yang diekspor environment.ymlberisi baris ini prefix: /home/superdev/miniconda3/envs/juicyenvyang memetakan ke lokasi anaconda saya yang akan berbeda di komputer lain.

Lau
sumber
7
Saya baru saja melakukan beberapa pengujian, dan berpikir saya menemukan awalan diabaikan ... tidak yakin mengapa ada di ekspor env. Anda seharusnya dapat melakukan conda env create -f environment.yml Sekadar sebagai tambahan, menurut pengalaman saya ini tidak akan berfungsi di seluruh platform, karena conda env akan mencantumkan banyak dependensi seperti `vs2015_runtime` jika Anda menggunakan Windows. Tapi tentu saja itu tidak tersedia di linux.
Alex G Rice
4
Conda sebenarnya merekomendasikan untuk membuat environment.ymlfile dengan tangan, sehingga Anda dapat membiarkannya - lihat stackoverflow.com/questions/39280638/…
Brian Burns

Jawaban:

178

Saya tidak dapat menemukan apa pun dalam condaspesifikasi yang memungkinkan Anda mengekspor file lingkungan tanpa prefix: ...baris. Namun, seperti yang ditunjukkan Alex di komentar, conda tampaknya tidak peduli dengan baris awalan saat membuat lingkungan dari file.

Dengan mengingat hal itu, jika Anda ingin pengguna lain tidak memiliki pengetahuan tentang jalur penginstalan default Anda, Anda dapat menghapus baris awalan dengan grepsebelum menulis ke environment.yml.

conda env export | grep -v "^prefix: " > environment.yml

Bagaimanapun, pengguna lain kemudian menjalankan:

conda env create -f environment.yml

dan lingkungan akan diinstal di jalur lingkungan conda default mereka.

Jika Anda ingin menentukan jalur penginstalan yang berbeda dari default untuk sistem Anda (tidak terkait dengan 'awalan' di environment.yml), cukup gunakan -pbendera diikuti dengan jalur yang diperlukan.

conda env create -f environment.yml -p /home/user/anaconda3/envs/env_name

Perhatikan bahwa Conda merekomendasikan membuat environment.ymldengan tangan, yang sangat penting jika Anda ingin berbagi lingkungan Anda di seluruh platform (Windows / Linux / Mac). Dalam hal ini, Anda bisa mengabaikannya prefix.

Andrew Guy
sumber
1
... sangat bagus! 👍
Ahi Tuna
44

Cara termudah untuk menyimpan paket dari lingkungan untuk diinstal di komputer lain adalah:

$ conda list -e > req.txt

kemudian Anda dapat menginstal lingkungan menggunakan

$ conda create -n new environment --file req.txt

jika Anda menggunakan pip, silakan gunakan perintah berikut: referensi https://pip.pypa.io/en/stable/reference/pip_freeze/

$ env1/bin/pip freeze > requirements.txt
$ env2/bin/pip install -r requirements.txt
javac
sumber
Bagus, tetapi tampaknya tidak berfungsi dengan paket yang diinstal pip.
Little Bobby Tables
1
terima kasih saya baru saja memperbarui berdasarkan referensi yang diberikan
javac
Saya telah menggunakan Anaconda Navigator dan pip (dari dalam lingkungan) untuk menginstal sesuatu. Apa yang akan Anda rekomendasikan untuk saya gunakan? Kedua perintah?
DA
Saya pikir lebih baik menggunakan perintah conda di lingkungan Anaconda, Anda juga dapat menggunakan pip jika diperlukan
javac
9
  • Linux

    conda env export --no-builds | grep -v "prefix"> environment.yml

  • Windows

    conda env export --no-builds | findstr -v "prefix"> environment.yml


Rasional: Secara default, conda env exporttermasuk informasi build:

$ conda env export
...
dependencies:
  - backcall=0.1.0=py37_0
  - blas=1.0=mkl
  - boto=2.49.0=py_0
...

Sebagai gantinya, Anda dapat mengekspor lingkungan Anda tanpa info build:

$ conda env export --no-builds
...
dependencies:
  - backcall=0.1.0
  - blas=1.0
  - boto=2.49.0
...

Yang melepaskan lingkungan dari versi Python dan OS.

Ilyas
sumber
1
Saya setuju bahwa ini adalah jawaban yang bagus, tetapi pertimbangkan untuk menambahkan beberapa detail tentang mengapa mengecualikan info build berguna untuk mentransfer envs lintas platform.
merv
Akhirnya menggunakan ini, tapi ide bagus @merv. Melakukannya.
François Leblanc
Sayangnya, ini tidak selalu berfungsi saat menginstal mengekspor dan menginstal ulang di OS yang berbeda.
Sören
2

Saya menemukan mengekspor paket dalam format string saja lebih portabel daripada mengekspor keseluruhan conda lingkungan. Seperti jawaban sebelumnya yang sudah disarankan:

$ conda list -e > requirements.txt

Namun, ini requirements.txtberisi nomor build yang tidak portabel antar sistem operasi, misalnya antara Macdan Ubuntu. Di conda env exportkami memiliki opsi --no-buildstetapi tidak dengan conda list -e, jadi kami dapat menghapus nomor build dengan mengeluarkan perintah berikut:

$ sed -i -E "s/^(.*\=.*)(\=.*)/\1/" requirements.txt 

Dan buat ulang lingkungan di komputer lain:

conda create -n recreated_env --file requirements.txt 
Nicole Finnie
sumber
sedperintah bekerja cukup bagus. Saya harus menghapus versi tambalan. Jadi major.minor.patchuntuk major.minordan itu berhasil. Ternyata, nomor patch yang lebih rendah telah dihapus oleh repo utama.
Lucas
1
  1. Pertama aktifkan lingkungan conda Anda (yang ingin Anda ekspor / cadangan)
conda activate myEnv
  1. Ekspor semua paket ke file (myEnvBkp.txt)
conda list --explicit > myEnvBkp.txt
  1. Pulihkan / impor lingkungan:
conda create --name myEnvRestored --file myEnvBkp.txt
Savrige
sumber