Zainstaluj nowy pakiet Qiskit 1.0
Qiskit 1.0 używa innej struktury pakietów niż poprzednie wersje Qiskit i prawdopodobnie spowoduje problemy w środowiskach korzystających z pakietów, które nie są jeszcze gotowe na Qiskit 1.0.
Nie próbuj uaktualniać istniejącego wirtualnego środowiska Python do Qiskit 1.0 w miejscu.
W przyszłości nie będziemy wprowadzać podobnych przełomowych zmian w pakowaniu. To jednorazowe zdarzenie, przy wydaniu Qiskit 1.0, specjalnie po to, aby zarządzanie pakietami było jak najprostsze w przyszłości.
Ten przewodnik podzielony jest na następujące sekcje. Musisz zapoznać się tylko z sekcjami, które są dla ciebie istotne.
- Użytkownicy powinni przeczytać sekcję Dla użytkowników.
- Jeśli tworzysz lub utrzymujesz pakiet zależny od Qiskit, przeczytaj sekcję Dla deweloperów.
- Jeśli napotkasz problemy z instalacją lub importowaniem Qiskit 1.0, zapoznaj się z sekcją Rozwiązywanie problemów.
Jeśli chcesz zrozumieć starą strukturę pakietów i powód jej zmiany, zapoznaj się z omówieniem przełomowych zmian w pakowaniu.
Dla użytkowników
Aby zainstalować Qiskit 1.0, musisz zacząć od nowego wirtualnego środowiska. Uaktualnienie istniejącej instalacji do Qiskit 1.0 w miejscu jest bardzo trudne i podatne na błędy.
Przykłady w tej sekcji używają modułu venv, który jest częścią standardowej biblioteki Pythona.
Jeśli korzystasz z innego narzędzia, takiego jak virtualenv lub conda, zajrzyj do jego dokumentacji po pomoc.
W poleceniach dla systemu Linux i macOS używana jest składnia bash-podobna. Do poleceń dla systemu Windows używany jest PowerShell.
Utwórz nowe środowisko
-
Utwórz nowe wirtualne środowisko w każdym katalogu projektu, nad którym pracujesz, używając preferowanej wersji Pythona 3.8 lub nowszej.
- macOS
- Linux
- Windows
python3 -m venv .venvpython3 -m venv .venvpython -m venv .venv
-
Aktywuj środowisko.
- macOS
- Linux
- Windows
source .venv/bin/activatesource .venv/bin/activate.venv\Scripts\activate.ps1 -
Zainstaluj pakiety według potrzeb. Najlepiej zrobić to za pomocą jednego polecenia
pip installzawierającego wszystkie zależności.pip install 'qiskit>=1'Opcjonalnie możesz uwzględnić dodatkowe pakiety, podając je jako argumenty. Na przykład:
pip install 'qiskit>=1' jupyterlab pandas matplotlibQiskit 1.0 zawiera przełomowe zmiany, dlatego kilka pakietów jest oznaczonych jako jeszcze niekompatybilnych z tą wersją. W związku z tym możesz napotkać błędy z
pip, dopóki nie zostaną wydane nowe wersje tych pakietów. Stare wersje pakietów mogą też zależeć od przestarzałego pakietuqiskit-terra. Takie pakiety mogą nie zwracać błędów podczas wykonywania tego polecenia, ale mogą zgłaszać błąd przy uruchamianiuimport qiskit. Nie należy instalować żadnych pakietów zależących bezpośrednio odqiskit-terra.wskazówkaJednym ze sposobów, aby wymagać od
pipzakazu instalowaniaqiskit-terraw poszczególnych poleceniachinstall, jest użycie pliku ograniczeń, który wymusza niemożliwą wersję dlaqiskit-terra. Na przykład plik ograniczeń zawierający wierszqiskit-terra>=1.0sprawi, że jeśli jakaś zależność spróbuje zainstalowaćqiskit-terra, żadna opublikowana wersja nie będzie spełniać wymagań.Udostępniliśmy taki plik w GitHub Gist pod adresem https://qisk.it/1-0-constraints, którego możesz używać w następujący sposób:
pip install -c https://qisk.it/1-0-constraints qiskit [other packages]Jeśli jakiś pakiet wymaga
qiskit-terra, zobaczysz błąd rozwiązywania zależności.ostrożnieNie instaluj pakietów niekompatybilnych z Qiskit 1.0 w tym wirtualnym środowisku. Jeśli musisz używać takich pakietów, zainstaluj je w osobnym wirtualnym środowisku z Qiskit 0.45 lub 0.46.
Jeśli masz istniejące środowisko, możesz użyć
pipdeptree, aby sprawdzić wymagania zainstalowanych pakietów i zobaczyć, czy któryś z nich wymagaqiskit<1. Dla tych, które wymagająqiskit<1, sprawdź dostępność aktualizacji zapewniających kompatybilność z Qiskit 1.0.Jeśli napotkasz problemy, zajrzyj do sekcji rozwiązywania problemów, lub zapytaj na Qiskit Slack. Jeśli uważasz, że to błąd, możesz zgłosić problem w Qiskit.
-
Jeśli nie planujesz od razu korzystać ze środowiska, użyj polecenia
deactivate, aby je opuścić.
Korzystaj z nowego środowiska
Za każdym razem, gdy rozpoczynasz nową sesję wiersza poleceń, musisz przejść do katalogu projektu i „aktywować" środowisko, uruchamiając polecenie activate:
- macOS
- Linux
- Windows
source .venv/bin/activate
source .venv/bin/activate
.venv\Scripts\activate.ps1
Dla deweloperów
Jeśli utrzymujesz pakiet zależny od Qiskit, skorzystaj z tych informacji, aby dowiedzieć się, jak poprawnie wyrazić swoją kompatybilność i testować względem Qiskit 1.0.
Zalecenia dotyczące wymagań
Zalecamy, aby twój pakiet wymagał qiskit>=0.45,<1 (lub innego odpowiedniego dolnego ograniczenia), jeśli nie masz pewności, czy pakiet jest kompatybilny z Qiskit 1.0.
To ta sama rekomendacja, która jest stosowana w przypadku kompatybilności z NumPy 2.0.
Kandydat do wydania Qiskit 1.0, wersja 1.0.0rc1, zostanie wydany 1 lutego 2024 roku. Powinieneś przetestować swój pakiet względem tej wersji i jak najszybciej wydać nową (kompatybilną) wersję swojego pakietu z odpiętym górnym ograniczeniem wersji.
Zalecenia dotyczące testowania z Qiskit 1.0
Poniższe zalecenia dotyczą zarówno proaktywnego testowania względem gałęzi main Qiskit, jak i testowania względem kandydata do wydania 1.0.0rc1 (i ewentualnie późniejszych).
Nie zalecamy na początku konfigurowania ochrony gałęzi na podstawie sukcesu CI względem gałęzi main Qiskit, ponieważ zmiany w Qiskit mogłyby uniemożliwić ci scalanie PR-ów.
Po wydaniu kandydatów do wydania Qiskit oraz po tym, gdy wszystkie zależności twojego pakietu będą obsługiwać Qiskit 1.0, zalecamy skonfigurowanie ochrony gałęzi na podstawie sukcesu względem najnowszego kandydata do wydania, aby mieć pewność, że pakiet pozostaje zgodny z Qiskit 1.0.
Jeśli ani twój pakiet, ani żadna z jego zależności przechodnich nie ma przypięcia wymagania qiskit<1, utwórz testowe środowisko wirtualne tak jak zwykle – jednym poleceniem pip install – i bezpośrednio wskaż qiskit==1.0.0rc1 lub qiskit==git+https://github.com/Qiskit/qiskit.git@main, odpowiednio do potrzeb.
Jest to najbardziej niezawodny sposób zagwarantowania, że masz w pełni poprawne środowisko.
Jeśli jedynym elementem grafu zależności twojego pakietu, który ma przypięcie qiskit<1, jest sam twój pakiet, możesz skonfigurować CI tak, by najpierw tymczasowo łatało plik wymagań, zezwalając na Qiskit 1.0, a następnie instalowało środowisko w jednym kroku jak poprzednio.
Alternatywnie skorzystaj z poniższych zasad ogólnego uaktualniania środowisk, lecz przejdź na rozwiązywanie zależności w jednym środowisku, gdy tylko będzie to możliwe.
Jeśli co najmniej jedna z twoich zależności przechodnich nie ma jeszcze wydanej wersji umożliwiającej obsługę Qiskit 1.0, musisz wprowadzić ręczne zmiany. Istnieje kilka strategii do wypróbowania, w przybliżonej kolejności od najbardziej do najmniej preferowanej:
- Zainstaluj problematyczną zależność z jej gałęzi
main, jeśli wersja deweloperska ma złagodzone przypięcie – dzięki temu możesz zbudować środowisko testowe w jednym kroku. - Wyklucz użycie tej zależności ze środowiska testowego, jeśli to możliwe.
- Utwórz środowisko testowe tak jak zwykle, a następnie ręcznie zastąp w nim Qiskit wersją 1.0.
Ręczna aktualizacja istniejącego środowiska
Ten proces celowo tworzy niepoprawne środowisko. W związku z tym wszelkie testy przeprowadzane w nim mają mniejszą wartość. Testy mogą pozornie przechodzić, co jednak nie gwarantuje zgodności pakietu z Qiskit 1.0. Może się tak dziać, ponieważ środowisko nie jest wewnętrznie spójne i może zawierać pliki nieistniejące w poprawnym środowisku, lub zachowanie nadpisanego pakietu może się zmienić wraz z Qiskit 1.0.
Jeśli jedna z twoich zależności przypina qiskit<1 nawet na swojej gałęzi deweloperskiej, może ona w ogóle nie działać z Qiskit 1.0, a jeśli twoje testy nie mogą być uruchomione z tego powodu, być może będziesz musiał poczekać, aż ta zależność stanie się zgodna (lub współpracować z jej twórcami w tym celu).
Aby zaktualizować środowisko na miejscu, wykonaj następujące kroki:
-
Utwórz środowisko jak zwykle, upewniając się, że nie są zainstalowane żadne pakiety rozszerzające przestrzeń nazw
qiskitaniqiskit.providers. -
Odinstaluj zarówno
qiskit, jak iqiskit-terra, aby mieć pewność, że żaden z nich nie jest obecny:
pip uninstall --yes qiskit qiskit-terra
W tym momencie katalog site-packages środowiska nie powinien zawierać katalogu qiskit. Nie musisz tego weryfikować przy każdym uruchomieniu CI, ale jeśli lokalnie debugujesz skrypt, wykonaj poniższe kroki w celu weryfikacji:
- Uruchom następujące polecenie z poziomu
pythonwirtualnego środowiska:
import site
print(site.getsitepackages())
-
Sprawdź, czy te katalogi nie zawierają katalogu
qiskit. Jeśli tak, prawdopodobnie masz zainstalowane pakiety rozszerzające przestrzeń nazw i powinieneś je znaleźć oraz usunąć tę zależność. -
Zainstaluj docelową wersję Qiskit 1.0, korzystając z jednego z tych poleceń:
- Po opublikowaniu żądanego kandydata do wydania:
pip install 'qiskit==1.0.0rc1' - Dla zależności z gałęzi
main(lub zastąp dowolnym identyfikatorem rewizjigitpo znaku@):pip install 'git+https://github.com/Qiskit/qiskit.git@main'
Masz teraz środowisko, w którym Qiskit pozwala ci przeprowadzać testy. Jeśli import qiskit powoduje ImportError lub masz trudności ze znalezieniem swoich zależności, zapoznaj się z poradami w sekcji dotyczącej zabezpieczeń przed niepoprawnym środowiskiem w Qiskit.
Przykładowe ręczne przepływy pracy GitHub Actions
Poniższe przepływy pracy konfigurują zaplanowane zadanie uruchamiane w nocy. Zadanie to przygotowuje środowisko testowe dla Qiskit 1.0 i uruchamia pytest (lub dowolne inne kroki testowe, których potrzebujesz).
Dla pakietu bez przechodnich zależności 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
Dla pakietu z nieuniknionymi zależnościami przechodnimi przypinającymi qiskit<1 – zbuduj niepoprawne środowisko:
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
Przykładowa konfiguracja tox
Poniżej znajdują się przykłady sekcji tox.ini służących do budowania środowiska testowego dla Qiskit 1.0 i uruchamiania pytest (lub dowolnych innych kroków testowych, których potrzebujesz).
Jeśli nic nie stoi na przeszkodzie zainstalowaniu Qiskit 1.0 w poprawnym środowisku:
[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`.
Jeśli twój pakiet lub zależność przechodnia ma nieuniknione przypięcie qiskit<1, zalecamy przeprowadzanie tych testów przy użyciu ręcznej budowy środowiska opisanej w powyższej sekcji, ponieważ tox wprowadza dodatkowe komplikacje przez to, że jest bardziej rygorystyczny w zakresie izolacji środowiska i kolejności instalacji.
To poprawne zachowanie tox-a (nie powinniśmy budować niepoprawnego środowiska), ale ponieważ z góry wiemy, że budujemy niepoprawne środowisko, te sprawdzenia przeszkadzają.
[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.
Rozwiązywanie problemów
Zmiany w pakowaniu wokół Qiskit 1.0 są skomplikowane, a standardowe narzędzie Pythona pip nie jest wystarczająco rozbudowane, abyśmy mogli zakomunikować mu zmiany w strukturach dystrybucji — niestety może to powodować problemy dla użytkowników.
Staraliśmy się sprawić, żeby Qiskit szybko i głośno sygnalizował wykrycie nieprawidłowego środowiska, bez fałszywych pozytywów.
Rozumiemy, że użytkownicy mogą być zirytowani komunikatem o błędzie, lecz w naszym doświadczeniu o wiele lepiej jest być świadomym problemu od razu, niż gdy wszystko pozornie działa, a potem zawodzi w subtelny sposób w przyszłości.
Ta sekcja zawiera błędy pakowania, które możesz napotkać, oraz opis sposobu ich rozwiązania.
Większość tych problemów nie jest specyficzna dla Qiskit, więc porady są prawdopodobnie trafne, nawet jeśli problematyczne elementy nie są związane z Qiskit.
import qiskit wyświetla „ModuleNotFoundError: No module named 'qiskit'"
Python nie może znaleźć twojej instalacji Qiskit.
Jeśli na pewno zainstalowałeś(-aś) Qiskit, to prawdopodobnie nie masz aktywowanego właściwego środowiska wirtualnego. Zapoznaj się z sekcją dotyczącą aktywowania środowiska wirtualnego, aby uzyskać instrukcje.
Jeśli używasz Jupyter i widzisz ten błąd, upewnij się, że Jupyter jest zainstalowany w tym samym środowisku wirtualnym co Qiskit.
Zamknij Jupyter, aktywuj środowisko wirtualne Qiskit w wierszu poleceń, uruchom pip install jupyterlab (lub inny interfejs notebooka, którego używasz), a następnie otwórz Jupyter ponownie.
import qiskit działa, ale każda próba wykonania czegokolwiek zwraca „AttributeError: module 'qiskit' has no attribute '...'"
Prawdopodobnie oznacza to, że w twoim środowisku znajdowała się stara wersja Qiskit obok pakietu rozszerzającego jego przestrzeń nazw (takiego jak stare wersje Qiskit Aer lub dawno przestarzały Qiskit IBM Q® Provider), a następnie Qiskit został odinstalowany. Najłatwiejszym rozwiązaniem jest uruchomienie nowego środowiska wirtualnego i zainstalowanie w nim wyłącznie aktualnych, nieobsolowanych pakietów.
Jeśli właśnie uruchomiłeś(-aś) nowe środowisko wirtualne lub masz pewność, że starsze pakiety nie są problemem, sprawdź, czy twój bieżący katalog roboczy (katalog, w którym znajdowała się sesja powłoki podczas uruchamiania Pythona / Jupyter) nie zawiera folderu o nazwie qiskit.
Domyślne reguły Pythona przeszukują bieżący katalog roboczy bardzo wcześnie na ścieżce wyszukiwania podczas próby import modułu, więc katalog o zduplikowanej nazwie może powodować problemy z importem.
pip odmawia zainstalowania niektórych pakietów razem
Po uruchomieniu polecenia pip install z wieloma elementami możesz zobaczyć błąd taki jak:
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
Opisuje to prawdziwy konflikt rozwiązywania zależności — nie ma prawidłowego sposobu, aby jednocześnie zainstalować wszystkie te dystrybucje.
W kontekście Qiskit 1.0 dzieje się tak prawdopodobnie dlatego, że jedna z dystrybucji, które próbujesz zainstalować, zawiera wymóg taki jak qiskit<1.0.
Oznacza to, że deweloperzy tej dystrybucji oznaczyli ją jako (jeszcze) niekompatybilną z Qiskit 1.0.
Możesz (uprzejmie) zapytać tych deweloperów, kiedy wydadzą nową wersję pakietu kompatybilną z Qiskit 1.0, ale najpierw sprawdź, czy nie ma już otwartego zgłoszenia lub pull requesta z tym pytaniem w miejscu, gdzie przyjmują komentarze. Pamiętaj, że to wymaga czasu — daj deweloperom mniej więcej miesiąc na przygotowanie nowych wersji swoich dystrybucji! Do tego czasu nie możesz zainstalować tej dystrybucji obok Qiskit 1.0. Aby nadal korzystać z tej dystrybucji, utwórz nowe środowisko wirtualne i użyj Qiskit 0.45 lub 0.46 (lub wersji obsługiwanej przez ten pakiet) razem z tym innym pakietem.
Jeśli pojawi się ten błąd, nie próbuj budować środowiska przez wielokrotne wywoływanie pip install.
Te polecenia prawdopodobnie nie zakończą się błędem, ale w efekcie stworzysz nieprawidłowe środowisko.
Prawdopodobnie zobaczysz wtedy niektóre inne komunikaty o błędach opisane w tej sekcji.
Możesz również przeczytać dokumentację Python Packaging Authority na temat rozwiązywania konfliktów.
pip kończy się powodzeniem, ale drukuje błędy po uruchomieniu poleceń pip install
W wyniku pip możesz zobaczyć błąd, taki jak poniższy:
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.
Pierwsza linia zazwyczaj pojawia się dosłownie (od wersji pip 23.3), ale druga linia zmienia się w zależności od konkretnego problemu i może być ich kilka.
pip prawdopodobnie poinformuje następnie, że wykonał to, czego chciałeś(-aś), pomimo komunikatu o błędzie.
Oznacza to, że środowisko jest konfliktowe i nie możesz mieć pewności, że będzie działać poprawnie.
Aby rozwiązać problem, przejrzyj listę wiadomości od pip i ustal, czy potrzebujesz wszystkich pakietów, które mają konfliktowe wymagania.
Czasami będą istniały prawdziwe konflikty między zależnościami — możesz potrzebować kilku środowisk wirtualnych, aby oddzielić zależności z niekompatybilnymi wymaganiami.
Najbezpieczniejszym wyborem jest rozpoczęcie nowego środowiska wirtualnego (lub więcej niż jednego, jeśli istnieją prawdziwe konflikty), a następnie usunięcie środowiska w konflikcie.
Podczas konfigurowania środowisk wirtualnych uruchamiaj tylko jedno polecenie pip install zawierające wszystkie potrzebne zależności.
Jest to najbardziej niezawodny sposób, by pip znalazł prawidłowo rozwiązane środowisko bez konfliktów.
Jeśli nadal masz problemy z konfliktami po skonfigurowaniu środowisk, unikaj uruchamiania kolejnych poleceń pip install lub pip uninstall — pip nie gwarantuje spójności środowiska przy kolejnych poleceniach.
Jeśli martwisz się pracą z wieloma środowiskami wirtualnymi, miej pewność, że programowanie i korzystanie z Pythona często wiąże się z kilkoma środowiskami wirtualnymi. Tworzenie nowych do pracy nad oddzielnymi projektami jest powszechną i dobrą praktyką. Gdy skończysz z danym środowiskiem wirtualnym, możesz po prostu usunąć jego katalog — nie ma powodu, aby trzymać wiele środowisk na stałe.
import qiskit zgłasza ImportError
Podczas uruchamiania import qiskit możesz zobaczyć błąd taki jak:
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.
Być może uruchomiłeś(-aś) w pełni poprawne polecenie pip install, postępując zgodnie ze wszystkimi zaleceniami w tym przewodniku, i nadal widzisz ten komunikat o błędzie.
To nie twoja wina, ale komunikat o błędzie jest poprawny i Qiskit nie może bezpiecznie się załadować.
Błąd oznacza, że Qiskit jest zainstalowany w nieprawidłowym środowisku zawierającym zarówno Qiskit 1.0, jak i wcześniejszą wersję.
Charakteryzuje się to tym, że dystrybucja qiskit-terra jest zainstalowana obok Qiskit 1.0.
Możesz sprawdzić, które dystrybucje są zainstalowane, uruchamiając pip list, ale nie możesz tego naprawić przez zwykłe odinstalowanie qiskit-terra.
Niestety qiskit>=1.0 i qiskit-terra to konfliktujące dystrybucje, które nie mogą być zainstalowane razem.
Jeszcze bardziej niestety, nie możemy zakomunikować tego konfliktu do pip z powodu ograniczeń jego systemu metadanych.
Ten błąd najczęściej pojawia się w jednej z dwóch sytuacji:
- Uruchomiłeś(-aś) coś w stylu
pip install 'qiskit>=1' coś-innego, acoś-innegoma wymaganie naqiskit-terra. - Próbowałeś(-aś) uruchomić
pip install -U qiskitw istniejącym środowisku.
W obu tych przypadkach nie ma gwarancji, że pip zwróci pomocny komunikat.
Jednym ze sposobów wymagania od pip, aby zabraniał instalacji qiskit-terra z poszczególnych poleceń install, jest użycie pliku ograniczeń wymagającego ustawienia qiskit-terra na niemożliwą wersję.
Na przykład plik ograniczeń zawierający linię qiskit-terra>=1.0 będzie oznaczał, że jeśli zależność spróbuje zainstalować qiskit-terra, żadna opublikowana wersja nie spełni wymagań.
Udostępniliśmy taki plik w GitHub Gist pod adresem https://qisk.it/1-0-constraints, z którego możesz skorzystać w ten sposób:
pip install -c https://qisk.it/1-0-constraints qiskit [other packages]
Jeśli jakiś pakiet wymaga qiskit-terra, zobaczysz niepowodzenie rozwiązywania.
Utwórz działające środowisko dla Qiskit 1.0
Bez względu na to, jak do tego doszło, o wiele łatwiej jest utworzyć nowe środowisko wirtualne.
Najpierw musimy dowiedzieć się, które pakiety wprowadzają zależność od qiskit-terra.
Używając uszkodzonego środowiska, zainstaluj pipdeptree z PyPI. Jest to narzędzie do generowania grafów zależności:
pip install pipdeptree
Zapytaj je, które pakiety wprowadzają zależności od qiskit-terra i qiskit (to dwa oddzielne polecenia):
pipdeptree --reverse --package qiskit-terra
pipdeptree --reverse --package qiskit
Wyniki mogą wyglądać mniej więcej tak:
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]
W powyższym przykładzie mamy dwie dystrybucje, które zadeklarowały kompatybilność z Qiskit 1.0 (qiskit-aer i qiskit-ibm-provider), oraz jedną, która nadal ma zależność od qiskit-terra.
Ten przykład ma płaską strukturę zależności.
Możesz zobaczyć znacznie głębsze drzewo.
Pakiety bezpośrednio zależne od qiskit-terra (o najmniejszym wcięciu) są najprawdopodobniej problematyczne, ale pakiet głębiej w drzewie może być problematyczny, jeśli zależy od konkretnej starej wersji innego pakietu, który już został zaktualizowany.
Zależność od qiskit-terra może oznaczać jedną z kilku rzeczy:
-
Zależny pakiet jest stary i nie zostanie zaktualizowany, aby obsługiwać Qiskit 1.0.
W takim przypadku nie ma możliwości używania tego pakietu z Qiskit 1.0 i będziesz musiał(-a) nadal używać poprzedniej wersji Qiskit. Zazwyczaj charakteryzuje się to tym, że zależny pakiet jest w swojej najnowszej wersji (zakładając, że środowisko jest nowe i nie przypiąłeś(-aś) niższej wersji) i ma bezpośrednie wymaganie na
qiskit-terra. -
Zależny pakiet jest aktywnie utrzymywany, ale jeszcze nie obsługuje Qiskit 1.0.
W takim przypadku będziesz musiał(-a) poczekać, aż deweloperzy wydadzą kompatybilną wersję — prosimy o cierpliwość! Zazwyczaj charakteryzuje się to tym, że zainstalowana dystrybucja nie jest w swojej najnowszej wersji, mimo że polecenie instalacji nie określało wersji. Możesz sprawdzić najnowszą wersję dystrybucji, znajdując jej stronę na https://pypi.org/.
pipprawdopodobnie przeszukał stare wersje pakietu, aż znalazł taką (być może sprzed miesięcy lub lat), która zależała tylko odqiskit-terra.To właśnie stało się w powyższym przykładzie. W chwili tworzenia tego dokumentu
qiskit-dynamics==0.4.4była najnowszą wersją.
Jeśli zbudowałeś(-aś) to środowisko przy użyciu kilku poleceń pip install (na przykład jeśli środowisko jest stare i było aktualizowane), najpierw spróbuj zainstalować wszystkie pakiety za pomocą jednego polecenia pip install podczas tworzenia nowego środowiska.
Jeśli problem nadal występuje, co najmniej jeden z pożądanych pakietów prawdopodobnie jeszcze nie obsługuje Qiskit 1.0, a pip znajduje starą wersję, którą uznaje za działającą, ponieważ nie zna konfliktu qiskit>=1/qiskit-terra.
Zamiast tego użyj poleceń pipdeptree, aby zidentyfikować, które zależności jeszcze nie obsługują Qiskit 1.0.
Wyklucz pakiety, które jeszcze nie obsługują Qiskit 1.0, podczas budowania środowiska Qiskit 1.0, lub nadal używaj poprzedniej wersji Qiskit.
Zapoznaj się z Utwórz nowe środowisko, aby uzyskać instrukcje.
Przykład w tej sekcji został wygenerowany przed wydaniem Qiskit 1.0.
„Stara" dystrybucja (qiskit-dynamics) zachowywała się poprawnie — nie było wiadomo, że obsługuje Qiskit 1.0, więc oznaczyła to w swoich wymaganiach.
Nie jest możliwe wsteczne datowanie zmian wymagań do wcześniej wydanych wersji, a pip przeszuka arbitralnie daleko wstecz, aby znaleźć coś, co działa podczas budowania środowiska.
Utwórz działające środowisko dla Qiskit 0.45 lub 0.46
Jeśli masz uszkodzone środowisko po próbie zainstalowania Qiskit 0.45 lub 0.46, najbardziej prawdopodobna sytuacja jest taka, że pip zainstalował Qiskit 1.0, ponieważ próbował wybrać najnowsze wersje pakietów, mimo że nie było to wymagane.
Najłatwiejszym sposobem naprawy jest utworzenie nowego środowiska wirtualnego, a następnie uruchomienie jednego polecenia pip install zawierającego wszystkie potrzebne pakiety, plus jawny wpis 'qiskit<1'.
Jeśli pip pomyślnie rozwiąże ten graf zależności, powinieneś(-naś) mieć działające środowisko wirtualne.
Jeśli co najmniej jedna dystrybucja wymaga Qiskit 1.0 lub nowszego, pip powinien podać komunikat o błędzie to wyjaśniający, który wygląda jak ten z sekcji o nieudanych rozwiązaniach.
Możesz również użyć poleceń pipdeptree wymienionych w Utwórz działające środowisko dla Qiskit 1.0 z poziomu uszkodzonego środowiska, aby określić, które dystrybucje mają jawne wymaganie na qiskit>=1.
Jestem deweloperem, moje środowiska są na pewno poprawne i nadal pojawia się ten błąd
Po pierwsze: musisz być absolutnie pewny(-a), że twoje środowiska są poprawne.
Test, którego Qiskit używa do wykrycia uszkodzonego środowiska, jest dość niezawodny — konkretnie odpytuje importlib.metadata o informacje o dystrybucji zainstalowanych pakietów i sprawdza zwrócone numery wersji.
Strona Qiskit 1.0 testu sprawdza też pliki znacznikowe obecne w starych wersjach Qiskit, a nieobecne w Qiskit 1.0.
Jeśli jesteś deweloperem Qiskit, możliwe, że masz stare katalogi qiskit.egg-info lub qiskit-terra.egg-info (lub *.dist-info) na swojej ścieżce meta (patrz sys.meta_path), pozostałe po starych instalacjach edytowalnych.
W szczególności sprawdź swój katalog roboczy pod kątem katalogów *.egg-info i *.dist-info.
Jeśli znajdują się w katalogu głównym jednego z twoich repozytoriów, możesz je usunąć. Najgorsze, co może się stać, to konieczność ponownego uruchomienia pip install -e ., a nawet to jest mało prawdopodobne, ponieważ są to zazwyczaj tylko elementy procesu budowania setuptools, które nie są czyszczone.
Jeśli powyższe informacje nie pomogły i jesteś w 100% pewny(-a), że twoje środowisko jest poprawne (lub celowo próbujesz przetestować uszkodzone środowisko):
- Utwórz zgłoszenie w Qiskit wyjaśniające, jak to się stało i dlaczego masz pewność, że środowisko jest poprawne, abyśmy mogli to naprawić.
- Możesz pominąć wyjątek, ustawiając zmienną środowiskową
QISKIT_SUPPRESS_1_0_IMPORT_ERROR=1.