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;)
Jawaban:
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:
Dan buat ulang menggunakan:
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:
yang Anda aktifkan menggunakan:
sumber
conda create
atauconda env create
ketika berbagi / menciptakan kembali suatu lingkungan. Bisakah Anda menjelaskan lebih lanjut mengapa Anda merekomendasikan penggunaanconda env create
dalam situasi ini?conda create
dan diconda env create
sini: groups.google.com/a/continuum.io/forum/#!topic/conda/… Yang mengatakan, saya pikir Anda biasanya dapat menggunakannya secara bergantian.conda create
vsconda env create
) harus dipilih dan apa kerugian dari masing-masing (misalnya: "[conda env create
adalah untuk] lingkungan di mana paket menggunakan pip telah diinstal ke dalam , yang menyebabkan kompleksitas tambahan ": kompleksitas tambahan apa yang ditambahkannya?)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.conda list --explicit > FILE_NAME
mengekspor binari untuk platform saat ini dan tampaknya tidak bekerja pada yang lain.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.
sumber
Konfigurasi lingkungan ekspor pertama dari lingkungan conda Anda saat ini menggunakan:
contoh:
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:
contoh:
Jika yang di atas tidak berfungsi (karena berbagai masalah konda itu sendiri), selalu patut dicoba dengan variasi berikut:
sumber
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:
Di virtualenv baru, minta
pip
untuk menginstal perpustakaan dengan versi yang sama: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 ).
sumber
anaconda
tanda pada pertanyaan Anda. Saya tidak berpengalaman dengan ini, tapi hati-hati. Saya pikir anaconda memiliki caranya sendiri dalam mengatur lingkungan dan menggunakan kedua anaconda danvirtualenv
bisa membuat Anda mendapat masalah. Namun, saya kira anaconda harus menawarkan fitur yang setara.Dari bagian paling akhir halaman dokumentasi ini :
Simpan paket untuk digunakan di masa mendatang:
Instal ulang paket dari file ekspor:
sumber
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
sumber
$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
Satu garis
conda create --clone source_env --name destination_env
sumber