Saya mencoba conda search --outdated
, ada banyak paket yang ketinggalan zaman, misalnya scipy adalah 0.17.1 tetapi yang terbaru adalah 0.18.0. Namun, ketika saya melakukan itu conda update --all
. Itu tidak akan memperbarui paket apa pun.
perbarui 1
conda update --all --alt-hint
Fetching package metadata .......
Solving package specifications: ..........
# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#
pembaruan 2
Saya dapat memperbarui paket-paket itu secara terpisah. Saya bisa melakukannya conda update scipy
. Tetapi mengapa saya tidak dapat memperbarui semuanya sekaligus?
conda update --all --alt-hint
dan melihat apakah itu memberikan hasil ... Atau coba sajaconda update scipy
dan lihat apa yang terjadi (mungkin dengan--alt-hint
bendera)But why I cannot update all of them in one go?
Mungkin karena Anda memiliki setidaknya satu paket yang tergantung pada versi yang lebih lama sehingga tidak ada yang dapat diperbarui.conda update conda
sebelumconda update --all
Jawaban:
TL; DR: konflik ketergantungan: Memperbarui satu memerlukan (dengan persyaratan itu) untuk menurunkan versi yang lain
Kamu benar:
sebenarnya cara untuk pergi 1 . Conda selalu mencoba untuk memutakhirkan paket ke versi terbaru dalam seri (katakanlah Python 2.x atau 3.x).
Konflik ketergantungan
Tetapi ada kemungkinan bahwa ada konflik ketergantungan (yang mencegah peningkatan lebih lanjut). Conda biasanya memperingatkan dengan sangat eksplisit jika itu terjadi.
misal X membutuhkan Y <5.0, jadi Y tidak akan pernah> = 5.0
Itu sebabnya Anda 'tidak bisa' memutakhirkan semuanya.
Menyelesaikan
Untuk menambahkan: mungkin ini bisa berfungsi tetapi versi X yang lebih baru yang bekerja dengan Y> 5.0 tidak tersedia di conda. Dimungkinkan untuk menginstal dengan pip, karena lebih banyak paket tersedia di pip. Namun ketahuilah bahwa pip juga menginstal paket jika ada konflik dependensi dan itu biasanya merusak lingkungan conda Anda dalam arti bahwa Anda tidak dapat menginstal dengan andal lagi dengan conda. Jika Anda melakukannya, lakukan itu sebagai pilihan terakhir dan setelah semua paket diinstal dengan conda. Ini agak hack.
Cara aman yang dapat Anda coba adalah menambahkan conda-forge sebagai saluran ketika meningkatkan (menambahkan
-c conda-forge
sebagai bendera) atau saluran lain yang Anda temukan yang berisi paket Anda jika Anda benar-benar membutuhkan versi baru ini . Dengan cara ini, conda juga mencari paket yang tersedia di tempat ini.Mempertimbangkan pembaruan Anda: Anda dapat memutakhirkannya secara terpisah, tetapi dengan melakukan hal itu tidak hanya akan menyertakan peningkatan, tetapi juga penurunan versi paket lain. Katakan, untuk menambahkan contoh di atas:
X> 2.0 membutuhkan Y <5.0, X <2.0 membutuhkan Y> 5.0
Jadi memutakhirkan Y> 5.0 menyiratkan penurunan X ke <2.0 dan sebaliknya.
( ini adalah contoh pedagogis, tentu saja, tetapi kenyataannya sama, biasanya hanya dengan dependensi dan sub-dependensi yang lebih rumit )
Jadi Anda masih tidak dapat memutakhirkan semuanya dengan melakukan peningkatan secara terpisah; dependensinya tidak memuaskan, jadi sebelumnya atau nanti, pembaruan akan menurunkan versi paket yang sudah ditingkatkan lagi. Atau hancurkan kompatibilitas paket-paket (yang biasanya tidak Anda inginkan!), Yang hanya mungkin dilakukan dengan secara eksplisit menjalankan diabaikan-dependensi dan paksa- perintah. Tapi itu hanya untuk meretas jalan keluar masalah Anda, jelas bukan kasus pengguna biasa!
1 Jika Anda benar-benar ingin memperbarui paket instalasi Anda, yang biasanya tidak Anda lakukan . Perintah yang dijalankan di lingkungan dasar akan memperbarui paket dalam hal ini, tetapi biasanya Anda harus bekerja dengan lingkungan virtual (
conda create -n myenv
dan kemudianconda activate myenv
). Menjalankanconda update --all
di dalam lingkungan seperti itu akan memperbarui paket di dalam lingkungan ini. Namun, karena lingkungan basis juga merupakan lingkungan, jawabannya berlaku untuk kedua kasus dengan cara yang sama.sumber
Untuk lebih tepatnya menjawab pertanyaan:
conda (yang merupakan conda untuk miniconda untuk Anaconda) memperbarui semua kecuali HANYA dalam versi spesifik paket -> major dan minor. Itulah paradigmanya.
Dalam dokumentasi Anda akan menemukan "CATATAN: Conda memperbarui ke versi tertinggi dalam seri, jadi Python 2.7 memperbarui ke tertinggi yang tersedia di seri 2.x dan 3.6 pembaruan ke tertinggi yang tersedia di seri 3.x." dokter
Jika Wang tidak memberikan contoh yang dapat direproduksi, orang hanya bisa membantu. mis. apakah itu benar-benar lingkungan virtual yang dia ingin perbarui atau dapatkah Wang mendapatkan apa yang dia inginkan
* TOLONG baca dokumen sebelum menjalankan "update --all"! Ini tidak mengarah pada pembaruan semua paket secara alami. Karena conda mencoba untuk menyelesaikan hubungan ketergantungan antara semua paket di lingkungan Anda, ini dapat menyebabkan paket DIPERBARUI tanpa peringatan.
Jika Anda hanya ingin memperbarui hampir semua, Anda dapat membuat file pin
sebelum menjalankan pembaruan.
Jika nanti Anda ingin mengabaikan file di env Anda untuk pembaruan, Anda dapat melakukan:
Anda seharusnya tidak melakukan pembaruan --semua. Namun jika Anda membutuhkannya, Anda lebih aman untuk menguji ini di lingkungan yang dikloning.
Langkah pertama harus selalu menjadi cadangan spesifikasi Anda saat ini:
(tetapi meskipun demikian tidak selalu ada tautan ke sumber yang tersedia - seperti untuk ekstensi jupyterlab)
Selanjutnya Anda dapat mengkloning dan memperbarui:
konfigurasi conda
memperbarui:
Karena ide conda bagus tetapi tidak bekerja dengan baik untuk lingkungan yang kompleks, saya pribadi lebih suka kombinasi
nix-shell (or lorri) and poetry
[sebagai pip / conda superior .-)] ( intro poetry2nix ).Terakhir, jika Anda benar-benar perlu bekerja dengan paket yang tidak kompatibel karena ketergantungannya, dimungkinkan dengan teknologi seperti NixOS / nix-pkgs .
sumber
conda update -n ENVIRONMENT --all
: Saya setuju bahwa inilah yang biasanya ingin ia gunakan, bukan untuk memperbarui lingkungan basis. Namun, saya tidak menemukan penjelasan dalam jawaban Anda tentang ini sama sekali, itu hanya ditulis dan tidak merujuk pada perbedaan menggunakan perintah op di lingkungan basis.Bayangkan grafik ketergantungan dari paket, ketika jumlah paket tumbuh besar, kemungkinan bertemu konflik ketika meningkatkan / menambahkan paket jauh lebih tinggi. Untuk menghindarinya, cukup buat lingkungan baru di Anaconda.
Hemat, pasang hanya yang Anda butuhkan. Bagi saya, saya menginstal paket-paket berikut di lingkungan baru saya:
Dan saya memiliki total 84 paket.
sumber
jika bekerja di MS windows, Anda dapat menggunakan Anaconda navigator. klik pada lingkungan, di kotak drop-down, itu "diinstal" secara default. Anda dapat memilih "dapat diperbarui" dan mulai dari sana
sumber
Untuk memperbarui semua paket yang mungkin saya gunakan
conda update --update-all
Berhasil!
sumber
Saya memecahkan masalah ini dengan
conda
danpip
.Pertama, saya jalankan:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
Setelah itu, saya membuka cmd dan menjalankan kode ini
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
Terakhir, Anda harus menginstal
matplotlib
dalam pip dengan kode ini itupip install matplotlib
sumber