Sari la conținutul principal

Instalează noul pachet Qiskit 1.0

Qiskit 1.0 folosește o structură de ambalare diferită față de versiunile anterioare ale Qiskit și va cauza cel mai probabil probleme în mediile care utilizează pachete ce nu sunt pregătite pentru Qiskit 1.0.

atenție

Nu încerca să actualizezi în loc un mediu virtual Python existent la Qiskit 1.0.

Nu vom mai face modificări de ambalare similare, cu impact major, în viitor. Acesta este un eveniment unic, la lansarea Qiskit 1.0, tocmai pentru ca modul de ambalare să fie cât mai simplu posibil în viitor.

Acest ghid este împărțit în următoarele secțiuni. Trebuie să parcurgi doar secțiunile relevante pentru tine.

  • Utilizatorii ar trebui să citească secțiunea Pentru utilizatori.
  • Dacă dezvolți sau menții un pachet care depinde de Qiskit, citește secțiunea Pentru dezvoltatori.
  • Dacă întâmpini probleme la instalarea sau importul Qiskit 1.0, consultă secțiunea Depanare.

Dacă ești interesat să înțelegi vechea structură de pachete și motivul pentru care s-a schimbat, consultă prezentarea generală a modificărilor majore de ambalare.

Pentru utilizatori

Trebuie să pornești un mediu virtual nou pentru a instala Qiskit 1.0. Actualizarea în loc a unei instalări existente la Qiskit 1.0 este foarte complicată și predispusă la erori.

notă

Exemplele din această secțiune folosesc modulul venv care face parte din biblioteca standard Python. Dacă utilizezi un alt instrument, cum ar fi virtualenv sau conda, consultă documentația acestuia pentru ajutor.

Pentru comenzile pe Linux și macOS, se folosește o sintaxă de tip bash. PowerShell este folosit pentru comenzile Windows.

Creează mediul nou

  1. Creează un mediu virtual nou în fiecare director de proiect în care lucrezi, folosind versiunea preferată de Python 3.8 sau mai recentă.

    python3 -m venv .venv
  1. Activează mediul.

    source .venv/bin/activate
  2. Instalează pachetele dorite. Ar trebui să faci asta folosind o singură comandă pip install cu toate dependențele incluse.

    pip install 'qiskit>=1'

    Opțional, poți include pachete suplimentare adăugându-le ca argumente. De exemplu:

    pip install 'qiskit>=1' jupyterlab pandas matplotlib

    Qiskit 1.0 include modificări majore, astfel că mai multe pachete sunt marcate ca necompatibile cu acesta. Prin urmare, este posibil să apară erori din partea pip până când sunt lansate versiuni noi ale acelor pachete. Versiunile vechi ale pachetelor pot depinde și de pachetul moștenitor qiskit-terra. Astfel de pachete s-ar putea să nu returneze erori la rularea acestei comenzi, dar pot genera o eroare la rularea import qiskit. Nu ar trebui să instalezi niciun pachet care depinde direct de qiskit-terra.

    sfat

    O modalitate de a impune pip să interzică qiskit-terra din comenzile individuale de install este să folosești un fișier de constrângeri care impune ca qiskit-terra să fie setat la o versiune imposibilă. De exemplu, un fișier de constrângeri care include linia qiskit-terra>=1.0 va face ca, dacă o dependență încearcă să instaleze qiskit-terra, nicio versiune publicată să nu corespundă cerințelor.

    Am furnizat un astfel de fișier într-un GitHub Gist la https://qisk.it/1-0-constraints, pe care îl poți folosi astfel:

    pip install -c https://qisk.it/1-0-constraints qiskit [other packages]

    Dacă un pachet necesită qiskit-terra, vei vedea un eșec de rezolvare.

    atenție

    Nu instala pachete incompatibile cu Qiskit 1.0 în acest mediu virtual. Dacă ai nevoie să folosești astfel de pachete, instalează-le într-un mediu virtual separat cu Qiskit 0.45 sau 0.46.

    Dacă ai un mediu existent, poți folosi pipdeptree pentru a interoga cerințele pachetelor instalate și a vedea dacă necesită qiskit<1. Pentru cele care necesită qiskit<1, caută actualizări care să le facă compatibile cu Qiskit 1.0.

    Dacă întâmpini probleme, consultă secțiunea de depanare, sau întreabă pe Qiskit Slack. Dacă crezi că există un bug, poți crea o problemă în Qiskit.

  3. Dacă nu intenționezi să folosești mediul imediat, folosește comanda deactivate pentru a-l părăsi.

Folosește mediul nou

De fiecare dată când pornești o nouă sesiune de linie de comandă, trebuie să navighezi la directorul proiectului tău și să „activezi" mediul rulând comanda activate:

source .venv/bin/activate

For developers

Dacă menții un pachet care depinde de Qiskit, folosește aceste informații pentru a afla cum să exprimi corect compatibilitatea și să testezi față de Qiskit 1.0.

Recomandări pentru cerințe

Recomandăm ca pachetul tău să impună qiskit>=0.45,<1 (sau o altă limită inferioară corespunzătoare) dacă nu ești sigur că pachetul este compatibil cu Qiskit 1.0. Aceasta este aceeași recomandare făcută și pentru compatibilitatea cu NumPy 2.0.

Un candidat de lansare pentru Qiskit 1.0, versiunea 1.0.0rc1, a fost publicat pe 1 februarie 2024. Ar trebui să testezi pachetul tău față de acesta și, cât mai curând posibil, să lansezi o versiune nouă (compatibilă) a pachetului, cu cerința superioară neimpusă.

Recomandări pentru testarea față de Qiskit 1.0

Aceste recomandări se aplică atât testării proactive față de ramura main a Qiskit, cât și testării față de candidatul de lansare 1.0.0rc1 (și versiuni ulterioare, dacă este cazul).

Nu recomandăm protejarea ramurilor prin succesul CI față de ramura main a Qiskit de la bun început, deoarece modificările din Qiskit te-ar putea împiedica să fuzionezi PR-uri. După publicarea candidaților de lansare Qiskit și după ce toate dependențele pachetului tău acceptă Qiskit 1.0, recomandăm protejarea ramurilor prin succes față de cel mai recent candidat de lansare, pentru a te asigura că pachetul rămâne compatibil cu Qiskit 1.0.

Dacă nici pachetul tău, nici oricare dintre dependențele sale tranzitive nu impune qiskit<1, ar trebui să creezi un mediu virtual de testare ca de obicei, printr-o singură comandă pip install, specificând direct qiskit==1.0.0rc1 sau qiskit==git+https://github.com/Qiskit/qiskit.git@main, după caz. Aceasta este cea mai sigură metodă de a te asigura că ai un mediu complet valid.

Dacă singurul component din graful de dependențe al pachetului tău care impune qiskit<1 este propriul tău pachet, s-ar putea să vrei ca suita CI să corecteze temporar fișierul tău de cerințe pentru a permite Qiskit 1.0, și apoi să instalezi mediul într-un singur pas, ca înainte. Alternativ, folosește regulile de mai jos pentru actualizări de mediu de uz general, dar treci la rezoluție într-un singur mediu cât mai curând posibil.

Dacă cel puțin una dintre dependențele tale tranzitive nu are încă o versiune de lansare care să permită suportul pentru Qiskit 1.0, trebuie să faci modificări manuale. Există mai multe strategii de încercat, în ordinea aproximativă a preferinței (de la cea mai preferabilă la cea mai puțin preferabilă):

  • Instalează dependența problematică din ramura sa main, dacă versiunea de dezvoltare a relaxat restricția, astfel încât să poți construi mediul de testare într-un singur pas.
  • Exclude utilizarea acelei dependențe din mediul de testare, dacă este posibil.
  • Creează un mediu de testare în același mod ca de obicei, apoi suprascrie-l manual pentru a folosi Qiskit 1.0.

Actualizarea manuală a unui mediu existent

atenție

Acest proces creează deliberat un mediu nevalid. Prin urmare, orice test care îl folosește este mai puțin valid. Testele pot părea că trec, dar acest lucru nu garantează că pachetul este compatibil cu Qiskit 1.0. Acest lucru se poate întâmpla deoarece mediul nu este auto-consistent și poate conține fișiere care nu există într-un mediu valid, sau comportamentul unui pachet suprascris se poate schimba odată cu Qiskit 1.0.

notă

Dacă una dintre dependențele tale impune qiskit<1 chiar și pe ramura lor de dezvoltare, este posibil să nu funcționeze în niciun fel cu Qiskit 1.0, iar dacă testele tale nu pot rula din această cauză, s-ar putea să trebuiască să aștepți ca ei să devină compatibili (sau să colaborezi cu ei în acest sens).

Pentru a actualiza un mediu în situ, urmează acești pași:

  1. Creează un mediu ca de obicei, asigurându-te că nu există pachete instalate care extind spațiul de nume qiskit sau qiskit.providers.

  2. Dezinstalează atât qiskit, cât și qiskit-terra pentru a te asigura că niciunul nu este prezent:

pip uninstall --yes qiskit qiskit-terra

În acest punct, site-packages al mediului nu ar trebui să conțină un director qiskit. Nu este nevoie să verifici acest lucru la fiecare rulare CI, dar dacă depanezi un script local, urmează acești pași pentru a verifica:

  1. Rulează următoarea comandă din interiorul python-ului mediului virtual:
import site
print(site.getsitepackages())
  1. Verifică că acele directoare nu conțin un director qiskit. Dacă îl conțin, ai probabil pachete care extind spațiul de nume instalate și ar trebui să le găsești și să elimini dependența.

  2. Instalează versiunea țintă a Qiskit 1.0 cu una dintre aceste comenzi:

  • După ce candidatul de lansare dorit a fost publicat:
    pip install 'qiskit==1.0.0rc1'
  • Pentru o dependență din ramura main (sau înlocuiește cu orice identificator de revizie git preferi după @).
    pip install 'git+https://github.com/Qiskit/qiskit.git@main'

Acum ai un mediu în care Qiskit îți permite să testezi. Dacă import qiskit produce un ImportError, sau dacă ai dificultăți în a-ți găsi dependențele, consultă sfaturile din secțiunea despre protecțiile pentru medii nevalide din Qiskit.

Exemple de fluxuri de lucru manuale GitHub Actions

Următoarele fluxuri de lucru configurează un job planificat care rulează peste noapte. Acest job configurează un mediu de testare pentru Qiskit 1.0 și rulează pytest (sau orice pași de testare ai nevoie).

Pentru un pachet care nu are dependențe tranzitive cu qiskit<1:

on:
schedule:
- cron: '0 3 * * *'
jobs:
test_main:
name: Test Qiskit main
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Create environment
run: |
set -e
# First ensure the standard tools are up-to-date.
python -m pip install --upgrade pip wheel setuptools
# Note that this resolves everything in a single command.
# If it fails, at least one package likely requires `qiskit<1`.
python -m pip install --upgrade \
-c constraints.txt \
-r requirements-dev.txt \
. \
'git+https://github.com/Qiskit/qiskit.git@main'
- name: Run tests
run: pytest

Pentru un pachet care are dependențe tranzitive inevitabile care impun qiskit<1, construiește un mediu nevalid:

on:
schedule:
- cron: '0 3 * * *'
jobs:
test_main:
name: Test Qiskit main
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Create environment
run: |
set -e
python -m pip install --upgrade pip wheel setuptools
# Install the regular test environment.
python -m pip install --upgrade \
-c constraints.txt \
-r requirements-dev.txt \
.
# Uninstall `qiskit` and `qiskit-terra`.
python -m pip uninstall --yes qiskit qiskit-terra
# Install the new version of Qiskit
python -m pip install 'git+https://github.com/Qiskit/qiskit.git@main'
- name: Run tests
run: pytest

Exemplu de configurare tox

Următoarele sunt exemple de secțiuni tox.ini pentru a construi un mediu de testare pentru Qiskit 1.0 și a rula pytest (sau orice alți pași de testare de care ai nevoie).

Dacă nimic nu împiedică instalarea Qiskit 1.0 într-un mediu valid:

[tox]
minversion = 4.0.0

# This environment section should set up your regular test build.
# We'll extend it after, and this one is just an example.
[testenv]
install_command = pip install -c {toxinidir}/constraints.txt -U {opts} {packages}
deps =
-r{toxinidir}/requirements-dev.txt
commands =
pytest

# This is an override environment to install Qiskit main.
# We're assuming that you have a requirement like `qiskit>=0.45`
# in your packages metadata requirements.
[testenv:qiskit-main]
# Inherit the base dependencies, and add the additional requirement.
deps =
[{testenv}deps]
git+https://github.com/Qiskit/qiskit@main
# All other options, like the `commands` section, are inherited from `testenv`.

Dacă pachetul tău sau o dependență tranzitivă are o fixare inevitabilă pe qiskit<1, îți recomandăm să faci aceste teste folosind construcția manuală a mediului, ca în secțiunea de mai sus, deoarece tox introduce mai multe complexități prin faptul că este mai strict în privința izolării mediului și a ordinii de instalare. Acesta este un comportament corect din partea tox (nu ar trebui să construim un mediu invalid), dar, deoarece știm deja că vom construi un mediu invalid, aceste verificări ne stau în cale.

[tox]
minversion = 4.0.0

# This environment section should set up your regular test build.
# We'll extend it later. This is just an example.
[testenv]
install_command = pip install -c {toxinidir}/constraints.txt -U {opts} {packages}
deps =
-r{toxinidir}/requirements-dev.txt
commands =
pytest

[testenv:qiskit-main]
# Set a sequence of commands to run in the environment after everything has been installed,
# but before the main test suite.
commands_pre =
pip uninstall --yes qiskit qiskit-terra
pip install 'git+https://github.com/Qiskit/qiskit@main'
# All other sections, like the dependencies and the 'commands' section are inherited.

Troubleshooting

Modificările de împachetare din jurul Qiskit 1.0 sunt complicate, iar instrumentul standard al Python, pip, nu este suficient de expresiv în unele privințe pentru a ne permite să comunicăm schimbările din structurile de distribuție, ceea ce, din nefericire, poate cauza probleme utilizatorilor. Am încercat să facem Qiskit să eșueze rapid și vizibil dacă detectează un mediu invalid, fără alarme false. Înțelegem că utilizatorii ar putea găsi enervant să primească mesajul de eroare, dar din experiența noastră, este mult mai bine să fii conștient de problemă imediat, decât ca lucrurile să pară că funcționează la suprafață, pentru ca apoi să eșueze în moduri subtile în viitor.

Această secțiune conține erori de împachetare pe care le-ai putea vedea și descrie cum să le rezolvi.

Cele mai multe dintre aceste probleme nu sunt specifice Qiskit, deci sfaturile sunt probabil relevante chiar dacă părțile problematice nu au legătură cu Qiskit.

import qiskit says "ModuleNotFoundError: No module named 'qiskit'"

Python nu poate găsi instalarea ta de Qiskit.

Dacă ai instalat cu siguranță Qiskit, probabil că nu ai mediul virtual corect activat. Consultă secțiunea despre activarea unui mediu virtual pentru instrucțiuni.

Dacă folosești Jupyter și întâlnești această eroare, asigură-te că Jupyter este instalat în același mediu virtual cu Qiskit. Ieși din Jupyter, activează mediul virtual Qiskit din linia de comandă, rulează pip install jupyterlab (sau orice interfață de notebook folosești), apoi redeschide Jupyter.

import qiskit reușește, dar orice altă operație returnează „AttributeError: module 'qiskit' has no attribute '...'"

Acest lucru înseamnă probabil că mediul tău conținea o versiune veche de Qiskit alături de un pachet care îi extindea spațiul de nume (cum ar fi versiunile vechi de Qiskit Aer sau depășitul Qiskit IBM Q® Provider), iar apoi Qiskit a fost dezinstalat. Cel mai simplu lucru de făcut este să pornești un mediu virtual nou și să instalezi în el doar pachete recente, non-obsolete.

Dacă tocmai ai pornit un mediu virtual nou sau ești sigur că pachetele vechi nu sunt problema, asigură-te că directorul tău de lucru curent (directorul în care se afla sesiunea de shell când ai lansat Python / Jupyter) nu conține un folder numit qiskit. Regulile implicite ale Python caută în directorul de lucru curent foarte devreme în calea de căutare atunci când încearcă să importe un modul, deci un director cu un nume duplicat poate cauza probleme la import.

pip refuses to install some packages together

După ce rulezi o comandă pip install cu mai multe elemente, ai putea vedea o eroare de genul:

ERROR: Cannot install qiskit-dynamics==0.4.4 and qiskit==1.0.0 because these package versions have conflicting dependencies.

The conflict is caused by:
The user requested qiskit==1.0.0
qiskit-dynamics 0.4.4 depends on qiskit<1.0

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

Aceasta descrie un conflict de rezoluție real; nu există nicio modalitate validă de a instala toate aceste distribuții în același timp.

În contextul Qiskit 1.0, acest lucru se datorează probabil faptului că una dintre distribuțiile pe care încerci să le instalezi conține o cerință de genul qiskit<1.0. Aceasta înseamnă că dezvoltatorii acelei distribuții au marcat-o ca nefiind (încă) compatibilă cu Qiskit 1.0.

Poți (politicos) să îi întrebi pe acești dezvoltatori când vor lansa o versiune nouă a pachetului lor compatibilă cu Qiskit 1.0, dar mai întâi verifică dacă nu există deja un issue sau un pull request deschis care solicită acest lucru, oriunde acceptă ei comentarii. Ține cont că asta ia timp; te rog să le acorzi dezvoltatorilor cam o lună pentru a pregăti versiuni noi ale distribuțiilor lor! Până atunci, nu poți instala acea distribuție alături de Qiskit 1.0. Pentru a continua să folosești acea distribuție, creează un mediu virtual nou și folosește Qiskit 0.45 sau 0.46 (sau orice versiune este suportată) alături de celălalt pachet.

atenție

Dacă primești această eroare, nu încerca să construiești mediul apelând pip install de mai multe ori. Acele comenzi probabil nu vor eșua, dar vei crea un mediu invalid. Vei vedea cel mai probabil unele dintre celelalte mesaje de eroare descrise în această secțiune.

Poți citi și documentația de la autoritatea de împachetare Python despre rezoluția conflictelor.

pip succeeds but prints errors after running pip install commands

Ai putea vedea o eroare în ieșirea lui pip, cum ar fi următoarea:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behavior is the source of the following dependency conflicts.
some-distribution 0.4.4 requires qiskit>=0.44,<1, but you have qiskit 1.0.0 which is incompatible.

Prima linie apare de obicei cuvânt cu cuvânt (începând cu pip 23.3), dar a doua linie se schimbă în funcție de problema exactă și pot exista mai multe linii similare. pip va indica ulterior că a efectuat cu succes ceea ce i-ai cerut, în ciuda mesajului de eroare.

Aceasta înseamnă că mediul este în conflict și nu poți fi sigur că va funcționa corect. Pentru a rezolva problema, examinează lista de mesaje de la pip și stabilește dacă ai nevoie de toate pachetele care au cerințe conflictuale. Uneori vor exista conflicte reale între dependențe; este posibil să ai nevoie de mai multe medii virtuale pentru a separa dependențele cu cerințe incompatibile.

Cea mai sigură opțiune este să pornești un mediu virtual nou (sau mai multe, dacă există conflicte reale), apoi să îl ștergi pe cel aflat în conflict.

Când configurezi medii virtuale, rulează o singură comandă pip install care include toate dependențele de care ai nevoie. Aceasta este cea mai fiabilă modalitate prin care pip poate găsi un mediu corect rezolvat, fără conflicte. Dacă continui să ai probleme cu conflicte după configurarea mediilor, evită să mai rulezi comenzi pip install sau pip uninstall; pip nu garantează că va menține mediul coerent la comenzile ulterioare.

notă

Dacă ești îngrijorat de lucrul cu mai multe medii virtuale, fii sigur că dezvoltarea și utilizarea Python implică adesea mai multe medii virtuale. Este o practică obișnuită și bună să creezi altele noi pentru a lucra la proiecte separate. Când ai terminat cu un mediu virtual, poți pur și simplu să ștergi directorul acestuia; nu există niciun motiv să menții mai multe medii permanent.

import qiskit raises ImportError

Când rulezi import qiskit, ai putea vedea o eroare de genul: ImportError: Qiskit is installed in an invalid environment that has both Qiskit 1.0+ and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit pre-1.0 and post-1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution.

sfat

Este posibil să fi rulat o comandă pip install complet validă, urmând toate recomandările din acest ghid, și totuși să vezi acest mesaj de eroare. Nu este vina ta, dar mesajul de eroare este corect, iar Qiskit nu poate fi încărcat în siguranță.

Eroarea indică faptul că Qiskit este instalat într-un mediu invalid care include atât Qiskit 1.0, cât și o versiune anterioară. Aceasta se manifestă prin prezența distribuției qiskit-terra instalată alături de Qiskit 1.0. Poți verifica ce distribuții sunt instalate rulând pip list, dar nu poți rezolva problema dezinstalând pur și simplu qiskit-terra.

Din păcate, qiskit>=1.0 și qiskit-terra sunt distribuții în conflict și nu pot fi instalate împreună. Și mai nefericit este că nu putem comunica acest conflict către pip din cauza limitărilor sistemului său de metadate.

Această eroare apare cel mai frecvent în una din două situații:

  • Ai rulat ceva de genul pip install 'qiskit>=1' altceva, iar altceva are o dependență față de qiskit-terra.
  • Ai încercat să rulezi pip install -U qiskit într-un mediu existent.

În ambele cazuri, nu există nicio garanție că pip îți va returna un mesaj util.

sfat

O modalitate de a-l forța pe pip să interzică qiskit-terra pentru comenzi individuale install este să folosești un fișier de constrângeri care impune ca qiskit-terra să fie setat la o versiune imposibilă. De exemplu, un fișier de constrângeri care include linia qiskit-terra>=1.0 va face ca, dacă o dependență încearcă să instaleze qiskit-terra, nicio versiune publicată să nu corespundă cerințelor.

Am furnizat un astfel de fișier într-un GitHub Gist la https://qisk.it/1-0-constraints, pe care îl poți utiliza astfel:

pip install -c https://qisk.it/1-0-constraints qiskit [other packages]

Dacă un pachet necesită qiskit-terra, vei vedea o eroare de rezoluție.

Create a working environment for Qiskit 1.0

Indiferent cum s-a ajuns în această situație, este mult mai ușor să creezi un mediu virtual nou.

Mai întâi, trebuie să aflăm care pachete introduc o dependență față de qiskit-terra. Folosind mediul defect, instalează pipdeptree din PyPI. Acesta este un instrument pentru generarea grafurilor de dependențe:

pip install pipdeptree

Întreabă-l care pachete introduc dependențe față de qiskit-terra și qiskit (acestea sunt două comenzi separate):

pipdeptree --reverse --package qiskit-terra
pipdeptree --reverse --package qiskit

Rezultatele ar putea arăta cam așa:

qiskit-terra==0.45.2
└── qiskit-dynamics==0.4.2 [requires: qiskit-terra>=0.23.0]
qiskit==1.0.0
├── qiskit-aer==0.13.2 [requires: qiskit>=0.45.0]
└── qiskit-ibm-provider==0.8.0 [requires: qiskit>=0.45.0]

În exemplul de mai sus, avem două distribuții care s-au declarat compatibile cu Qiskit 1.0 (qiskit-aer și qiskit-ibm-provider) și una care are în continuare o dependență față de qiskit-terra.

sfat

Acest exemplu are o structură de dependențe plată. Este posibil să vezi un arbore mult mai adânc decât acesta. Pachetele care depind direct de qiskit-terra (cu indentarea cea mai mică) sunt cel mai probabil cele problematice, dar unul mai adânc în arbore poate fi problematic dacă depinde de o versiune veche specifică a unui alt pachet care a fost deja actualizat.

Existența unei dependențe față de qiskit-terra poate însemna unul din mai multe lucruri:

  • Dependentul este un pachet vechi și nu va fi actualizat pentru a suporta Qiskit 1.0.

    În acest caz, nu există nicio posibilitate de a folosi pachetul cu Qiskit 1.0 și va trebui să continui să folosești o versiune anterioară de Qiskit. De obicei, aceasta se caracterizează prin faptul că dependentul se află la cea mai recentă versiune a sa (presupunând că mediul este nou și nu l-ai fixat la o versiune inferioară) și are o cerință directă față de qiskit-terra.

  • Dependentul este un pachet care este menținut activ, dar nu suportă încă Qiskit 1.0.

    În acest caz, va trebui să aștepți ca dezvoltatorii să lanseze o versiune compatibilă — te rog să fii răbdător! De obicei, aceasta se caracterizează prin faptul că distribuția instalată nu este la cea mai recentă versiune a sa, chiar dacă comanda ta de instalare nu a specificat o versiune. Poți verifica cea mai recentă versiune a distribuției găsind pagina sa pe https://pypi.org/.

    pip a căutat probabil versiuni vechi ale pachetului până a găsit una (posibil de acum luni sau ani) care depindea doar de qiskit-terra.

    Acesta este ceea ce s-a întâmplat în exemplul de mai sus. La momentul creării acestui document, qiskit-dynamics==0.4.4 era cea mai recentă versiune lansată.

Dacă ai construit acest mediu din mai multe comenzi pip install (de exemplu, dacă mediul este vechi și a fost actualizat), încearcă mai întâi să instalezi toate pachetele folosind o singură comandă pip install atunci când construiești un mediu nou. Dacă problema persistă, cel puțin unul din pachetele dorite probabil nu suportă încă Qiskit 1.0, iar pip găsește o versiune veche despre care consideră că va funcționa, deoarece nu cunoaște conflictul qiskit>=1/qiskit-terra.

În schimb, folosește comenzile pipdeptree pentru a identifica ce dependențe nu suportă încă Qiskit 1.0. Exclude orice pachete care nu suportă încă Qiskit 1.0 atunci când construiești un mediu Qiskit 1.0, sau continuă să folosești o versiune anterioară de Qiskit. Consultă Create the new environment pentru instrucțiuni.

notă

Exemplul din această secțiune a fost generat înainte de lansarea Qiskit 1.0.

Distribuția „veche" în cauză (qiskit-dynamics) se comporta corect; nu se știa că suportă Qiskit 1.0 încă, deci a marcat aceasta în cerințele sale. Nu este posibil să retroactiv modifici cerințele pentru versiunile deja lansate, iar pip va căuta arbitrar de departe în timp pentru a găsi ceva care funcționează atunci când construiește un mediu.

Create a working environment for Qiskit 0.45 or 0.46

Dacă ai un mediu defect după ce ai încercat să instalezi Qiskit 0.45 sau 0.46, cel mai probabil pip a instalat Qiskit 1.0 deoarece a încercat să aleagă cele mai recente versiuni ale pachetelor, chiar dacă nu era necesar. Cel mai simplu mod de a remedia aceasta este să creezi un mediu virtual nou, apoi să rulezi o singură comandă pip install care să conțină toate pachetele de care ai nevoie, plus o intrare explicită 'qiskit<1'. Dacă pip rezolvă cu succes acest graf de dependențe, ar trebui să ai un mediu virtual funcțional. Dacă cel puțin o distribuție necesită Qiskit 1.0 sau mai mare, pip ar trebui să îți afișeze un mesaj de eroare care explică aceasta, care arată ca cel din secțiunea privind rezoluțiile eșuate.

Poți folosi și comenzile pipdeptree enumerate în Create a working environment for Qiskit 1.0 din interiorul mediului defect pentru a determina care distribuții au o cerință explicită față de qiskit>=1.

I'm a developer, my environments are definitely right, and I'm still getting the error

Mai întâi: trebuie să fii absolut sigur că mediile tale sunt corecte. Testul pe care Qiskit îl folosește pentru a detecta un mediu defect este destul de robust; mai exact, interoghează importlib.metadata pentru informații despre distribuțiile pachetelor instalate și verifică numerele de versiune returnate. Partea Qiskit 1.0 a testului verifică și fișierele santinelă care erau prezente în versiunile vechi de Qiskit și nu în Qiskit 1.0.

Dacă ești un dezvoltator Qiskit, este posibil să ai directoare vechi qiskit.egg-info sau qiskit-terra.egg-info (sau *.dist-info) prezente în meta path (vezi sys.meta_path), rămase de la instalări editabile vechi. În special, verifică directorul de lucru pentru orice directoare *.egg-info și *.dist-info. Dacă se află în rădăcina unuia din depozitele tale de cod, le poți șterge. Cel mai rău lucru care se poate întâmpla este să fie nevoie să rulezi din nou pip install -e ., și chiar și aceasta este puțin probabil, deoarece acestea sunt de obicei doar parte din procesul de build setuptools care nu se curăță automat.

Dacă informațiile de mai sus nu te ajută și ești 100% sigur că mediul tău este corect (sau încerci în mod deliberat să testezi un mediu defect):

  1. Creează un issue în Qiskit explicând cum s-a întâmplat aceasta și de ce ești sigur că mediul este corect, pentru ca noi să putem remedia problema.
  2. Poți suprima excepția setând variabila de mediu QISKIT_SUPPRESS_1_0_IMPORT_ERROR=1.