Haruskah conda, atau conda-forge digunakan untuk lingkungan Python?

128

Condadan conda-forgekeduanya adalah pengelola paket Python. Apa pilihan yang tepat jika ada paket di kedua repositori? Django, misalnya, dapat dipasang dengan salah satu, tetapi perbedaan antara keduanya adalah beberapa ketergantungan (conda-forge memiliki lebih banyak lagi). Tidak ada penjelasan untuk perbedaan ini, bahkan README sederhana pun tidak.

Yang mana yang harus digunakan? Conda atau conda-forge? Apakah itu penting?

tilikoom
sumber
5
"Conda dan conda-forge adalah manajer paket Python." Saya tidak berpikir itu benar. Saya tidak berpikir itu bahkan dalam kategori yang sama. condaadalah manajer paket dan conda-forgesaluran. Mungkinkah benar ketika pertanyaan ini diajukan?
endolith

Jawaban:

203

Jawaban singkatnya adalah, menurut pengalaman saya secara umum, tidak masalah yang Anda gunakan.

Jawaban panjangnya:

Begitu conda-forgejuga saluran tambahan tempat paket dapat diinstal. Dalam hal ini, ini tidak lebih istimewa dari saluran default, atau dari ratusan (ribuan?) Saluran lainnya yang paketnya telah diposting orang. Anda dapat menambahkan saluran Anda sendiri jika Anda mendaftar di https://anaconda.org dan mengunggah paket Conda Anda sendiri.

Di sini kita perlu membuat perbedaan, yang menurut saya Anda tidak jelas dari ungkapan Anda dalam pertanyaan, antara conda, manajer paket lintas platform, dan conda-forge, saluran paket. Anaconda Inc. (sebelumnya Continuum IO), pengembang utama condaperangkat lunak, juga mengelola saluran paket terpisah, yang merupakan default saat Anda mengetik conda install packagenametanpa mengubah opsi apa pun.

Ada tiga cara untuk mengubah opsi saluran. Dua yang pertama dilakukan setiap kali Anda menginstal paket dan yang terakhir tetap ada. Yang pertama adalah menentukan saluran setiap kali Anda menginstal paket:

conda install -c some-channel packagename

Tentu saja, paket tersebut harus ada di saluran itu. Dengan cara ini akan menginstal packagenamedan semua dependensinya dari some-channel. Sebagai alternatif, Anda dapat menentukan:

conda install some-channel::packagename

Paket masih harus ada some-channel, tapi sekarang hanya packagenameakan ditarik dari some-channel. Paket lain yang diperlukan untuk memenuhi dependensi akan dicari dari daftar saluran default Anda.

Untuk melihat konfigurasi saluran Anda, Anda dapat menulis:

conda config --show channels

Anda dapat mengontrol urutan pencarian saluran conda config. Kamu bisa menulis:

conda config --add channels some-channel

untuk menambahkan saluran some-channelke bagian atas channelsdaftar konfigurasi. Ini memberikan some-channelprioritas tertinggi. Prioritas menentukan ( sebagian ) saluran mana yang dipilih ketika lebih dari satu saluran memiliki paket tertentu. Untuk menambahkan saluran ke akhir daftar dan memberikan prioritas terendah, ketik

conda config --append channels some-channel

Jika Anda ingin menghapus saluran yang Anda tambahkan, Anda dapat melakukannya dengan menulis

conda config --remove channels some-channel

Lihat

conda config -h

untuk opsi lainnya.

Dengan semua itu, ada empat alasan utama untuk menggunakan conda-forgesaluran tersebut, bukan defaultssaluran yang dikelola oleh Anaconda:

  1. Paket di conda-forge mungkin lebih terkini daripada yang ada di defaultssaluran
  2. Ada paket di conda-forgesaluran yang tidak tersedia daridefaults
  3. Anda lebih suka menggunakan dependensi seperti openblas(from conda-forge) daripada mkl(from defaults).
  4. Jika Anda menginstal paket yang membutuhkan pustaka terkompilasi (misalnya, ekstensi C atau pembungkus di sekitar pustaka C), ini dapat mengurangi kemungkinan inkompatibilitas jika Anda menginstal semua paket di lingkungan dari satu saluran karena biner kompatibilitas pustaka dasar C (tetapi saran ini mungkin kedaluwarsa / berubah di masa mendatang).
darthbith.dll
sumber
1
Terima kasih! Saya memiliki dua pertanyaan terkait: 1. bagaimana cara mengetahui saluran mana yang baik untuk dicoba dan; 2. setelah saya mengonfigurasi pada satu saluran, bagaimana cara meresetnya kembali ke default?
Daniel
1
@Kenny Untuk menjawab pertanyaan pertama Anda, Anda harus mencari paket yang Anda inginkan di anaconda.org dan melihat saluran mana yang memiliki paket tersebut. Saya mengedit jawaban untuk menjawab pertanyaan kedua Anda. Namun, saya juga akan mencatat bahwa jika Anda ingin menginstal satu paket dari saluran, mungkin lebih mudah menggunakan conda install -c some-channel packagenamecara menulis perintah
darthbith
ini bagus! Apakah ada perbandingan yang tersedia antara conda-forge dan conda dalam hal # modul yang didukung, kesegaran, cakupan, dll?
Rutger Hofste
1
Bukankah mkllebih cepat dari openblas?
endolith
3
@endolith Mungkin, tapi 1) mungkin hanya pada prosesor Intel dan 2) itu bukan open source
darthbith
4

Anaconda telah mengubah Persyaratan Layanan mereka sehingga "pengguna komersial berat" harus membayar, yang tidak termasuk conda-forgesaluran.

Anda mungkin ingin tetap menggunakannya conda-forgejika Anda tidak ingin membayar untuk penggunaan tersebut. Seperti yang dinyatakan dalam dokumen :

conda config --add channels conda-forge
conda config --set channel_priority strict
conda install <package-name>

Anda juga dapat menggunakan miniforge yang memiliki conda-forgesaluran default, dan mendukung platform ppc64le dan aarch64 serta yang biasa lainnya.

adrin
sumber
3

Saluran conda-forge adalah tempat Anda dapat menemukan paket-paket yang telah dibuat untuk conda tetapi belum menjadi bagian dari distribusi resmi Anaconda.

Umumnya, Anda dapat menggunakan salah satunya.

Ashiq Imran
sumber
1

Ada beberapa pustaka Python yang tidak dapat Anda instal dengan sederhana conda installkarena salurannya tidak tersedia kecuali Anda menerapkan conda-forge. Dari pengalaman saya, pip lebih umum untuk melihat sumber saluran yang berbeda daripada conda. Misalnya, jika Anda ingin menginstal, python-constraintAnda dapat melakukannya melalui pip installtetapi menginstalnya melalui ** cond **. Anda harus menentukan saluran - conda-forge.

conda install -c conda-forge python-constraint // works

tapi tidak

conda install python-constraint
ewalel
sumber
Jawaban yang membingungkan. penginstalan pip membawa paket di luar pengelolaan paket dan verifikasi ketergantungan milik conda, yang berarti Anda perlu mengelolanya (dan kemungkinan ketergantungannya) secara manual dan perintah seperti conda update --allitu tidak akan memperbarui paket yang diinstal pip
Jean Monet