Fahami perubahan pakej Qiskit v1.0 yang memecah keserasian
Qiskit v1.0 menggunakan struktur pembungkusan yang berbeza daripada versi Qiskit sebelumnya dan berkemungkinan besar akan menyebabkan masalah dalam persekitaran yang menggunakan pakej yang belum bersedia untuk Qiskit v1.0.
Jangan cuba naik taraf persekitaran maya Python sedia ada ke Qiskit v1.0 secara terus.
Kami tidak akan membuat perubahan pembungkusan yang memecah keserasian sedemikian pada masa hadapan. Ini adalah peristiwa sekali sahaja, semasa keluaran Qiskit v1.0, khusus supaya cerita pembungkusan kami akan semudah mungkin pada masa hadapan.
Halaman ini mengandungi maklumat terperinci tentang pakej Qiskit sebelum 1.0 dan sebab kami membuat perubahan pembungkusan yang memecah keserasian ini.
Kami tahu bahawa perubahan ini menyusahkan, tetapi ini memulihkan Qiskit kepada struktur pakej mudah yang digunakan oleh kebanyakan pakej Python, yang akan lebih mudah bagi pengguna, pembangun, dan pengarang perpustakaan selepas peralihan Qiskit v1.0 selesai.
Pendahuluan: glosari terminologi pembungkusan Python​
Untuk menerangkan dengan lebih baik bagaimana metapackage Qiskit lama berstruktur dan bagaimana ia telah berubah dengan keluaran Qiskit v1.0, berikut ialah glosari jargon pembungkusan Python yang kerap digunakan. Perkataan-perkataan berikut mempunyai makna khusus yang akan kami gunakan dalam dokumen ini.
Klik di sini untuk membaca glosari halaman ini
-
modul: Satu fail Python tunggal.
-
pakej: Direktori yang mengandungi
__init__.pydan fail atau pakej lain yang boleh dibaca oleh Python. Ini ialah kod sebenar yang dipasang pada komputer anda, dan merupakan apa yang dilaksanakan apabila anda menjalankanimport something. Python menganggap mana-mana direktori yang berada pada laluan carian sebagai sesuatu yang boleh anda import (dan akan mengimport banyak item tambahan).Ini bukan objek yang sama yang anda
pip install(yang merupakan pengedaran), tetapi biasanya apa yang andapip installdan apa yang andaimportmempunyai nama yang sama. -
submodul, subpakej: Ini adalah istilah yang tidak tepat, tetapi kerap digunakan. Bahagian sub bermaksud "terkandung dalam pakej". Submodul ialah modul dan subpakej ialah pakej, tetapi ia adalah sebahagian daripada pakej yang lebih besar.
-
pakej ruang nama: Pakej yang boleh mempunyai submodul atau subpakej dipasang ke dalamnya oleh pengedaran lain. Secara penting, tiada satu pengedaran yang menyumbang kepada pakej ruang nama semestinya memiliki semua fail yang dipasang, jadi ia boleh menjadi rumit untuk menyahpasang atau menaik taraf sepenuhnya.
-
pengedaran: Fail Python termampat, fail data, dan metadata yang dimuat turun apabila anda menjalankan
pip install something. Selalunya, pengedaran mengandungi tepat satu pakej dan metadata tentang cara memasangnya (keperluannya dan sebagainya), tetapi ini tidak diwajibkan. Pengedaran boleh mengandungi sifar atau lebih modul atau pakej.Jika anda biasa dengan "pengurus pakej" di luar konteks Python, seperti
aptdari Debian/Ubuntu atau Homebrew pada macOS, maka apa yang mereka panggil "pakej", Python memanggilnya pengedaran, dan tiada padanan tepat untuk apa yang Python panggil sebagai pakej.Kebanyakan sumber yang bercakap tentang pembungkusan Python menggunakan istilah pakej untuk bermaksud kedua-dua pengedaran dan pakej, dan anda mesti merujuk konteks untuk memahami apa yang dimaksudkan. Secara umum, jika anda
importia, sumber bermaksud "pakej", dan jika andapip installia, sumber bermaksud "pengedaran". -
laluan carian: Apabila cuba
import something, Python mencari senarai tempat yang telah ditetapkan untuk modul atau pakej yang dipanggilsomething. Senarai tempat itu ialah laluan carian. Anda boleh melihat dan mengubah suai laluan carian dalamsys.path. -
keperluan: Pengedaran mengandungi maklumat tentang pengedaran lain yang bergantung padanya semasa dipasang. Mana-mana pengedaran lain yang diperlukan adalah keperluan, dan pengurus pakej (biasanya
pipatauconda) harus memastikan bahawa semua keperluan dipasang dengan versi yang serasi.
Python sangat dinamik, dan banyak kerumitan boleh timbul; contohnya, mungkin modul atau pakej tidak sepadan dengan fail pada cakera, atau ia adalah sambungan terkompil.
Laluan carian bukan sahaja pencarian ke atas direktori, tetapi untuk perbincangan ini, hanya fail pada cakera yang relevan. Kerumitan selanjutnya tidak perlu untuk memahami masalah yang dihuraikan dalam bahagian ini, jadi anda boleh menggunakan model yang dihuraikan di atas.
Struktur Qiskit lama​
Secara sejarah, Qiskit terdiri daripada banyak pengedaran Python: qiskit-terra, teras pengkompil; qiskit-aer, simulator berprestasi tinggi; pembekal IBM Quantum® asal; dan beberapa pakej yang kini sudah lapuk yang menyediakan ciri-ciri algoritma penerokaan atau pengujian eksperimen tertentu.
Untuk kemudahan pengguna, kami juga menyediakan pengedaran Python yang dipanggil qiskit, yang tidak mengandungi kod sendiri, tetapi menyebabkan semua komponen lain dipasang.
Kami menamakan ini metapackage, sebagai analogi kepada konsep serupa dalam pengurus pakej lain.
Kod teras Qiskit tinggal dalam qiskit-terra, yang memiliki akar pakej Python qiskit. Dalam erti kata lain, qiskit-terra mengawal apa yang berlaku apabila anda menjalankan import qiskit.
Sehingga Qiskit v1.0, pakej qiskit adalah pakej ruang nama dan mengandungi pakej ruang nama kedua di qiskit.providers.
Organisasi ini menyebabkan kami dan pengguna kami beberapa masalah.
Sebagai contoh, perpustakaan downstream yang bergantung pada Qiskit selalunya hanya memerlukan teras pengkompil, dan tidak memerlukan ekosistem besar yang datang dengan pip install qiskit.
Mereka oleh itu akan menentukan keperluan mereka dengan betul sebagai qiskit-terra.
Walau bagaimanapun, apabila orang cuba menyahpasang Qiskit dengan menjalankan pip uninstall qiskit, pip menghadapi masalah:
piptidak membuang pengedaran yang kini tidak digunakan. Jadipip uninstall qiskithampir tidak melakukan apa-apa; tiada kod dalam pengedaran, jadi tiada kod yang dibuang.- Walaupun jika ia membuang kod, banyak pengedaran downstream akan kekal dipasang kerana ia bergantung pada
qiskit-terra. - Walaupun jika
qiskit-terradinyahpasang, ia mungkin masih meninggalkan direktoriqiskityang boleh diimport tanpa kod yang berguna, kerana ia adalah pakej ruang nama.
Apabila memasang atau menaik taraf pengedaran dengan arahan pip install, pip juga tidak mengambil kira resolusi keperluan sebelumnya.
Kerana terdapat dua pakej, menaik taraf pakej yang memerlukan qiskit-terra untuk dinaik taraf menyebabkan persekitaran yang tidak sah; pip menaik taraf qiskit-terra tetapi membiarkan qiskit tidak berubah.
Ia mengeluarkan amaran pada ini dan semua arahan pip install berikutnya, tetapi kerana tiada yang kelihatan rosak, pengguna biasanya mengabaikan amaran itu, dan pip tidak menaikkan status ralat atau melarang operasi.
Dari semasa ke semasa, kami membuang elemen dari metapackage qiskit sehingga, bermula dengan Qiskit v0.44, hanya qiskit-terra yang tinggal.
Daripada komponen-komponen ini, qiskit-aer masih wujud dan dikemas kini secara aktif, tetapi kini dipasang sebagai pengedaran berasingan.
Begitu juga, kami semakin kuat menggalakkan perpustakaan lain daripada menggunakan cangkuk ruang nama.
Kami membuang penggunaan cangkuk Qiskit terakhir dalam pakej yang tidak lapuk dengan keluaran Qiskit Aer v0.11 dan pakej Python qiskit_aer barunya, walaupun sehingga Qiskit v1.0 kami juga memaksa laluan ruang nama qiskit.providers.aer untuk berfungsi.
Bermula dengan Qiskit v1.0, kami telah membuang keupayaan pakej untuk melanjutkan mana-mana ruang nama qiskit. Oleh itu, pip uninstall pada pengedaran yang betul dalam persekitaran yang sah kini berfungsi seperti yang dijangkakan.
Struktur Qiskit baru​
Bermula dengan versi 1.0, Qiskit terdiri daripada satu pengedaran tunggal, dipanggil qiskit, yang memasang satu pakej tunggal, juga dipanggil qiskit, yang memiliki semua kod yang terkandung dalam direktorinya.
Ini adalah struktur normal kod Python, dan merupakan struktur paling mudah dan paling kurang terdedah kepada ralat.
Pengedaran qiskit-terra pada PyPI tidak akan pernah dikemas kini ke versi 1.0 atau ke atas; ia sepenuhnya digantikan oleh qiskit.
Nama qiskit-terra tidak lagi terlibat dalam pemasangan.
Walau bagaimanapun, pakej qiskit-terra tidak dibuang dari PyPI, dan kami akan meninggalkan versi terbarunya dalam keadaan berfungsi, supaya kod saintifik lama dan pakej warisan boleh terus menggunakannya dengan lebih mudah.
Malangnya, disebabkan warisan metapackage dan kekurangan dalam pip sebagai pengurus pakej, adalah tidak mungkin bagi kami untuk membuat laluan naik taraf yang lancar sepenuhnya bagi pengguna ke Qiskit v1.0, terutamanya sementara beberapa pakej bergantung pada versi Qiskit yang lebih awal, dan beberapa hanya memerlukan Qiskit v1.0+.
Masalah ini akan berkurang apabila lebih banyak ekosistem berhijrah ke Qiskit v1.0.
Ke mana perginya modul aplikasi?​
Anda mungkin perasan bahawa arahan pip install qiskit tidak lagi menyertakan pakej seperti qiskit-aer atau qiskit-nature. Dengan pembuangan struktur metapackage, banyak pakej ini telah dipecahkan kepada pengedaran yang perlu dipasang secara berasingan.
Sebelum keluaran Qiskit SDK v1.0, Qiskit terdiri daripada banyak pengedaran Python yang berbeza, seperti qiskit-terra, teras pengkompil; qiskit-aer, simulator berprestasi tinggi; pembekal IBM Quantum® asal; dan beberapa pakej yang kini sudah lapuk yang menyediakan ciri-ciri algoritma penerokaan atau pengujian eksperimen tertentu.
Jika anda ingin memasang pakej yang sebelumnya termasuk dalam metapackage Qiskit, lawati ekosistem Qiskit untuk mencari pelbagai pakej yang sesuai dengan keperluan anda. Anda juga boleh membaca panduan migrasi v1.0 untuk maklumat lanjut tentang cara memasang pengedaran baru.