Bagaimana cara mengkloning lingkungan kerja Python di komputer lain?

26

Saya mengembangkan model pembelajaran mesin dengan Python (Anaconda + Flask) di workstation saya dan semuanya berjalan dengan baik. Kemudian, saya mencoba untuk mengirimkan program ini ke komputer lain di mana tentu saja saya mencoba untuk mengatur lingkungan yang sama, tetapi program tersebut gagal berjalan. Saya menyalin program ke mesin lain di mana ia juga berjalan dengan lancar.

Saya tidak bisa mencari tahu apa masalahnya dalam kasus gagal (baik kode program dan pesan kesalahan sangat banyak sehingga saya tidak dapat menyajikannya di sini) tapi saya hampir yakin bahwa itu adalah sesuatu dengan versi dependensi yang berbeda .

Jadi, pertanyaan saya adalah bahwa dengan lingkungan di mana program tertentu berjalan dengan baik, bagaimana saya bisa mengkloningnya ke yang lain di mana ia harus berjalan dengan baik juga? Tentu saja, tanpa kloning dari sistem lengkap;)

Hendrik
sumber
Gunakan conda env export.
kbrose

Jawaban:

39

Pertama-tama ini adalah pertanyaan Python / Anaconda dan mungkin harus ditanyakan di subsite pertukaran stack yang berbeda.


Adapun pertanyaan itu sendiri - Anda dapat mengekspor lingkungan Anaconda Anda menggunakan:

conda env export > environment.yml

Dan buat ulang menggunakan:

conda env create -f environment.yml

Harap perhatikan bahwa seperti yang disarankan orang lain - Anda harus menggunakan lingkungan virtual yang memungkinkan Anda membuat lingkungan tertentu yang terpisah dari mesin Anda dan mengelolanya dengan lebih mudah.

Untuk membuat lingkungan virtual di Anaconda, Anda dapat menggunakan:

conda create -n yourenvname python=x.x anaconda

yang Anda aktifkan menggunakan:

source activate yourenvname
engsel
sumber
Dokumentasi Anaconda tidak begitu jelas tentang apakah akan digunakan conda createatau conda env createketika berbagi / menciptakan kembali suatu lingkungan. Bisakah Anda menjelaskan lebih lanjut mengapa Anda merekomendasikan penggunaan conda env createdalam situasi ini?
Tanguy
Anda dapat menemukan beberapa catatan tentang perbedaan antara conda createdan di conda env createsini: groups.google.com/a/continuum.io/forum/#!topic/conda/… Yang mengatakan, saya pikir Anda biasanya dapat menggunakannya secara bergantian.
Ginge
1
Saya telah melihat utas ini, tetapi tepatnya saya mencoba untuk memahami dengan tepat di situasi mana setiap opsi ( conda createvs conda env create) harus dipilih dan apa kerugian dari masing-masing (misalnya: "[ conda env createadalah untuk] lingkungan di mana paket menggunakan pip telah diinstal ke dalam , yang menyebabkan kompleksitas tambahan ": kompleksitas tambahan apa yang ditambahkannya?)
Tanguy
Saya ingin bertanya ketika menjalankan conda env create -f environment.yml, ini akan menyebabkan kesalahan karena nama virtenv dalam file yml telah digunakan. Ubah nama menjadi virtenv baru Anda untuk diatasi.
Giang Nguyễn
Dengan cara ini menyelamatkan hidup Anda! jika Anda membuat lingkungan dari file berdasarkan instruksi halaman Anaconda Managing Environments, tidak berfungsi jika Anda menggunakan platform lain. conda list --explicit > FILE_NAMEmengekspor binari untuk platform saat ini dan tampaknya tidak bekerja pada yang lain.
Shayan Amani
5

Lihat 'wadah', misalnya Docker ( https://www.docker.com/what-container ), alternatif yang lebih ringan untuk virtualisasi.

Ini akan membutuhkan investasi waktu tetapi pada akhirnya akan memberikan banyak manfaat.

Dari tautan, tempat saya menandai kebutuhan spesifik Anda dalam huruf miring miring :

Paket perangkat lunak ke dalam unit standar untuk pengembangan, pengiriman, dan penyebaran

Gambar kontainer adalah paket perangkat lunak yang ringan, berdiri sendiri, dapat dieksekusi yang mencakup semua yang diperlukan untuk menjalankannya: kode, runtime, alat sistem, pustaka sistem, pengaturan. Tersedia untuk aplikasi berbasis Linux dan Windows, perangkat lunak kemas akan selalu berjalan sama, apa pun lingkungannya . Wadah mengisolasi perangkat lunak dari lingkungannya, misalnya perbedaan antara pengembangan dan lingkungan pementasan dan membantu mengurangi konflik antara tim yang menjalankan perangkat lunak berbeda pada infrastruktur yang sama.

Pieter21
sumber
5

Konfigurasi lingkungan ekspor pertama dari lingkungan conda Anda saat ini menggunakan:

conda-env  export -n your_env_name > your_env_name.yml

contoh:

conda-env  export -n base> base.yml

Setelah menjalankan perintah di atas, mereka harus berupa file konfigurasi yml di direktori Anda saat ini yang berisi informasi tentang lingkungan conda Anda

Untuk membuat lingkungan baru menggunakan menjalankan file konfigurasi yml:

conda-env create -n new_env -f=\path\to\base.yml 

contoh:

conda-env create -n venv -f=base.yml

Jika yang di atas tidak berfungsi (karena berbagai masalah konda itu sendiri), selalu patut dicoba dengan variasi berikut:

conda-env create --name new_env --file \path\to\base.yml 
Muhammad Umar Amanat
sumber
4

Jika program Anda sebagian besar adalah Python, Anda hanya bisa mengandalkan lingkungan virtual.

Buat lingkungan virtual untuk mengisolasi dependensi Anda daripada menggunakan pustaka sistem. Kemudian gunakan alat lingkungan virtual untuk menduplikasi lingkungan Anda.

Dalam virtualenv yang berfungsi, buat file dengan versi setiap pustaka Python yang diinstal:

pip freeze > requirements.txt

Di virtualenv baru, minta pipuntuk menginstal perpustakaan dengan versi yang sama:

pip install -r requirements.txt

Ini memastikan Anda mendapatkan versi lib yang sama di kedua mesin. Dan karena requirement.txt dilacak oleh VCS Anda, Anda selalu dapat membuat ulang lingkungan versi lama kode Anda.

Tentu saja, jika Anda memerlukan database, server web produksi, dll. Anda berakhir dengan beberapa langkah lagi dan Anda tidak dapat mengandalkan virtualenv untuk memastikan kedua lingkungan cocok. Di sinilah Docker masuk (Lihat jawaban Pieter21 ).

Jérôme
sumber
Saya tidak melihat anacondatanda pada pertanyaan Anda. Saya tidak berpengalaman dengan ini, tapi hati-hati. Saya pikir anaconda memiliki caranya sendiri dalam mengatur lingkungan dan menggunakan kedua anaconda dan virtualenvbisa membuat Anda mendapat masalah. Namun, saya kira anaconda harus menawarkan fitur yang setara.
Jérôme
1

Dari bagian paling akhir halaman dokumentasi ini :

Simpan paket untuk digunakan di masa mendatang:

conda list --export > package-list.txt

Instal ulang paket dari file ekspor:

conda create -n myenv --file package-list.txt
Miladiouss
sumber
1

Ringkasan cara yang ada untuk membuat lingkungan berdasarkan yang lain:

  • Mengkloning suatu lingkungan :

    • Dari lingkungan yang ada:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • Dari file lingkungan yang diekspor pada mesin yang sama:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • Dari file lingkungan yang diekspor pada mesin yang berbeda:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```
Shayan Amani
sumber
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
B. Sun
0

Satu garis

conda create --clone source_env --name destination_env

salin
sumber