Zum Hauptinhalt springen

Das neue Qiskit-1.0-Paket installieren

Qiskit 1.0 verwendet eine andere Paketierungsstruktur als frühere Qiskit-Versionen und verursacht in Umgebungen, die noch nicht für Qiskit 1.0 bereit sind, wahrscheinlich Probleme.

vorsicht

Versuche nicht, eine bestehende virtuelle Python-Umgebung direkt auf Qiskit 1.0 zu aktualisieren.

Wir werden in Zukunft keine vergleichbaren rückwärtsinkompatiblen Paketierungsänderungen mehr vornehmen. Dies ist ein einmaliges Ereignis zum Zeitpunkt der Veröffentlichung von Qiskit 1.0, damit unsere Paketierungsstrategie zukünftig so unkompliziert wie möglich ist.

Dieser Leitfaden ist in folgende Abschnitte unterteilt. Du musst nur die Abschnitte lesen, die für dich relevant sind.

  • Nutzende sollten den Abschnitt Für Nutzende lesen.
  • Wenn du ein Paket entwickelst oder pflegst, das von Qiskit abhängt, lies den Abschnitt Für Entwickelnde.
  • Wenn du beim Installieren oder Importieren von Qiskit 1.0 auf Probleme stößt, schaue in den Abschnitt Fehlerbehebung.

Wenn du die alte Paketstruktur verstehen möchtest und wissen willst, warum sie geändert wurde, lies die Übersicht der rückwärtsinkompatiblen Paketierungsänderungen.

Für Nutzende

Du musst eine neue virtuelle Umgebung erstellen, um Qiskit 1.0 zu installieren. Ein direktes Upgrade einer bestehenden Installation auf Qiskit 1.0 ist sehr fehleranfällig und nicht empfehlenswert.

hinweis

Die Beispiele in diesem Abschnitt verwenden das venv-Modul, das zur Python-Standardbibliothek gehört. Wenn du ein anderes Werkzeug verwendest, z. B. virtualenv oder conda, schau in dessen Dokumentation nach.

Für Linux- und macOS-Befehle wird eine bash-ähnliche Syntax verwendet. Für Windows-Befehle wird PowerShell verwendet.

Neue Umgebung erstellen

  1. Erstelle in jedem Projektverzeichnis, mit dem du arbeitest, eine neue virtuelle Umgebung – mit deiner bevorzugten Python-Version 3.8 oder neuer.

    python3 -m venv .venv
  1. Aktiviere die Umgebung.

    source .venv/bin/activate
  2. Installiere die gewünschten Pakete. Verwende dabei am besten einen einzigen pip install-Befehl, der alle Abhängigkeiten enthält.

    pip install 'qiskit>=1'

    Du kannst optional weitere Pakete als zusätzliche Argumente angeben. Zum Beispiel:

    pip install 'qiskit>=1' jupyterlab pandas matplotlib

    Qiskit 1.0 enthält rückwärtsinkompatible Änderungen, daher sind einige Pakete als noch nicht kompatibel markiert. Es kann daher zu Fehlermeldungen von pip kommen, bis neue Versionen dieser Pakete veröffentlicht werden. Ältere Paketversionen könnten außerdem vom veralteten qiskit-terra-Paket abhängen. Solche Pakete erzeugen beim Ausführen des Befehls möglicherweise keinen Fehler, könnten aber beim Ausführen von import qiskit einen Fehler auslösen. Du solltest keine Pakete installieren, die direkt von qiskit-terra abhängen.

    tipp

    Eine Möglichkeit, pip dazu zu zwingen, qiskit-terra bei einzelnen install-Befehlen zu verbieten, ist die Verwendung einer Constraints-Datei, die qiskit-terra auf eine unmögliche Version festlegt. Eine Constraints-Datei, die z. B. die Zeile qiskit-terra>=1.0 enthält, bewirkt, dass keine veröffentlichte Version den Anforderungen entspricht, sobald eine Abhängigkeit versucht, qiskit-terra zu installieren.

    Wir haben eine solche Datei in einem GitHub Gist unter https://qisk.it/1-0-constraints bereitgestellt, die du wie folgt verwenden kannst:

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

    Wenn ein Paket qiskit-terra benötigt, wird ein Auflösungsfehler angezeigt.

    vorsicht

    Installiere keine Pakete, die mit Qiskit 1.0 inkompatibel sind, in dieser virtuellen Umgebung. Wenn du solche Pakete benötigst, installiere sie in einer separaten virtuellen Umgebung mit Qiskit 0.45 oder 0.46.

    Wenn du eine bestehende Umgebung hast, kannst du pipdeptree nutzen, um die Abhängigkeiten deiner installierten Pakete abzufragen und zu prüfen, ob sie qiskit<1 erfordern. Suche für alle Pakete, die qiskit<1 verlangen, nach Updates, die sie mit Qiskit 1.0 kompatibel machen.

    Wenn du auf Probleme stößt, schaue in den Abschnitt Fehlerbehebung, oder frage im Qiskit Slack. Wenn du glaubst, einen Fehler gefunden zu haben, kannst du ein Issue für Qiskit erstellen.

  3. Wenn du die Umgebung nicht sofort verwenden möchtest, verlasse sie mit dem Befehl deactivate.

Neue Umgebung verwenden

Jedes Mal, wenn du eine neue Befehlszeilensitzung startest, musst du in dein Projektverzeichnis navigieren und die Umgebung durch Ausführen des Befehls activate „aktivieren":

source .venv/bin/activate

Für Entwickelnde

Wenn du ein Paket pflegst, das von Qiskit abhängt, findest du hier Informationen dazu, wie du die Kompatibilität korrekt angibst und gegen Qiskit 1.0 testest.

Empfehlungen für Abhängigkeiten

Wir empfehlen, dass dein Paket qiskit>=0.45,<1 (oder eine andere geeignete untere Schranke) erfordert, wenn du dir nicht sicher bist, ob das Paket mit Qiskit 1.0 kompatibel ist. Dies entspricht der Empfehlung für NumPy-2.0-Kompatibilität.

Ein Qiskit-1.0-Release-Kandidat, Version 1.0.0rc1, wurde am 1. Februar 2024 veröffentlicht. Du solltest dein Paket dagegen testen und so bald wie möglich eine neue (kompatible) Version deines Pakets ohne die obere Versionseinschränkung veröffentlichen.

Empfehlungen für Tests gegen Qiskit 1.0

Diese Empfehlungen gelten sowohl für proaktive Tests gegen den Qiskit-main-Branch als auch für Tests gegen den Release-Kandidaten 1.0.0rc1 (und spätere, falls zutreffend).

Wir empfehlen zunächst nicht, Branch-Protection auf Basis von CI-Erfolg gegen den Qiskit-main-Branch einzurichten, da Qiskit-Änderungen das Zusammenführen von PRs verhindern könnten. Nach der Veröffentlichung von Qiskit-Release-Kandidaten und nachdem alle Abhängigkeiten deines Pakets Qiskit 1.0 unterstützen, empfehlen wir jedoch, Branch-Protection auf Basis von Erfolg gegen den neuesten Release-Kandidaten einzurichten, um sicherzustellen, dass das Paket mit Qiskit 1.0 kompatibel bleibt.

Wenn weder dein Paket noch eine seiner transitiven Abhängigkeiten eine Versionseinschränkung auf qiskit<1 hat, solltest du eine Test-Virtual-Umgebung wie gewohnt mit einem einzigen pip install-Befehl erstellen und direkt qiskit==1.0.0rc1 oder qiskit==git+https://github.com/Qiskit/qiskit.git@main angeben. Dies ist der zuverlässigste Weg, um sicherzustellen, dass du eine vollständig gültige Umgebung hast.

Wenn nur dein eigenes Paket in der Abhängigkeitsgraph-Komponente eine Versionseinschränkung auf qiskit<1 aufweist, möchtest du vielleicht in deiner CI-Suite zunächst vorübergehend deine Anforderungsdatei patchen, um Qiskit 1.0 zu erlauben, und die Umgebung dann in einem einzigen Schritt installieren wie zuvor. Alternativ kannst du die folgenden Regeln für allgemeine Umgebungsupdates verwenden, aber so bald wie möglich auf eine Single-Environment-Auflösung umsteigen.

Wenn mindestens eine deiner transitiven Abhängigkeiten noch keine veröffentlichte Version hat, die Qiskit 1.0 unterstützt, musst du manuelle Änderungen vornehmen. Es gibt mehrere Strategien, in ungefährer Reihenfolge der Präferenz (von am meisten zu am wenigsten bevorzugt):

  • Installiere die problematische Abhängigkeit aus ihrem eigenen main-Branch, wenn die Entwicklungsversion die Einschränkung gelockert hat, damit du die Testumgebung in einem einzigen Schritt aufbauen kannst.
  • Schließe die Verwendung dieser Abhängigkeit in der Testumgebung aus, wenn möglich.
  • Erstelle eine Testumgebung auf die übliche Weise und überschreibe sie dann manuell, um Qiskit 1.0 zu verwenden.

Bestehende Umgebung manuell aktualisieren

vorsicht

Dieser Prozess erstellt absichtlich eine ungültige Umgebung. Daher ist jeder Test, der sie verwendet, weniger aussagekräftig. Tests könnten scheinbar bestehen, aber das garantiert nicht, dass das Paket mit Qiskit 1.0 kompatibel ist. Dies könnte passieren, weil die Umgebung nicht in sich konsistent ist und Dateien enthalten kann, die in einer gültigen Umgebung nicht vorhanden sind, oder weil sich das Verhalten eines überschriebenen Pakets mit Qiskit 1.0 ändern könnte.

hinweis

Wenn eine deiner Abhängigkeiten qiskit<1 auch in ihrem Entwicklungs-Branch einschränkt, funktioniert sie möglicherweise überhaupt nicht mit Qiskit 1.0. Wenn deine Tests deswegen nicht ausgeführt werden können, musst du möglicherweise warten, bis sie (oder du gemeinsam mit ihnen) kompatibel werden.

Um eine Umgebung direkt zu aktualisieren, führe diese Schritte aus:

  1. Erstelle eine Umgebung wie gewohnt und stelle sicher, dass keine Pakete installiert sind, die den qiskit- oder qiskit.providers-Namespace erweitern.

  2. Deinstalliere sowohl qiskit als auch qiskit-terra, um sicherzustellen, dass keines der beiden vorhanden ist:

pip uninstall --yes qiskit qiskit-terra

An diesem Punkt sollte das site-packages-Verzeichnis der Umgebung kein qiskit-Verzeichnis enthalten. Du musst dies nicht bei jedem CI-Lauf überprüfen, aber wenn du ein Skript lokal debuggst, führe diese Schritte zur Überprüfung aus:

  1. Führe den folgenden Befehl innerhalb des python der virtuellen Umgebung aus:
import site
print(site.getsitepackages())
  1. Überprüfe, dass diese Verzeichnisse kein qiskit-Verzeichnis enthalten. Wenn doch, hast du wahrscheinlich Pakete installiert, die den Namespace erweitern – finde und entferne die entsprechende Abhängigkeit.

  2. Installiere die gewünschte Version von Qiskit 1.0 mit einem dieser Befehle:

  • Nachdem der gewünschte Release-Kandidat veröffentlicht wurde:
    pip install 'qiskit==1.0.0rc1'
  • Für eine main-Branch-Abhängigkeit (oder ersetze den gewünschten git-Revisions-Bezeichner nach dem @):
    pip install 'git+https://github.com/Qiskit/qiskit.git@main'

Du hast jetzt eine Umgebung, in der du mit Qiskit testen kannst. Wenn import qiskit zu einem ImportError führt oder du Probleme hast, deine Abhängigkeiten zu finden, sieh dir die Hinweise im Abschnitt über den Schutz vor ungültigen Umgebungen in Qiskit an.

Beispiel-GitHub-Actions-Workflows für manuelle Ausführung

Die folgenden Workflows richten einen geplanten Job ein, der nächtlich ausgeführt wird. Dieser Job richtet eine Testumgebung für Qiskit 1.0 ein und führt pytest (oder welche Testschritte du benötigst) aus.

Für ein Paket, das keine transitiven Abhängigkeiten auf qiskit<1 hat:

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

Für ein Paket, das unvermeidliche transitive Abhängigkeiten hat, die qiskit<1 einschränken – erstelle eine ungültige Umgebung:

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

Beispiel-tox-Konfiguration

Die folgenden Beispiele zeigen tox.ini-Abschnitte, um eine Testumgebung für Qiskit 1.0 aufzubauen und pytest (oder welche Testschritte du benötigst) auszuführen.

Falls nichts die Installation von Qiskit 1.0 in einer gültigen Umgebung verhindert:

[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`.

Wenn dein Paket oder eine transitive Abhängigkeit eine unvermeidliche Einschränkung auf qiskit<1 hat, empfehlen wir, die Tests mit der manuellen Umgebungserstellung wie im obigen Abschnitt durchzuführen, da tox durch seine strengere Umgebungsisolation und Installationsreihenfolge mehrere Komplexitäten einführt. Dies ist korrektes Verhalten von tox (wir sollten keine ungültige Umgebung erstellen), aber da wir bereits wissen, dass wir eine ungültige Umgebung bauen, stehen diese Prüfungen im Weg.

[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.

Fehlerbehebung

Die Paketierungsänderungen rund um Qiskit 1.0 sind komplex, und Pythons Standardwerkzeug pip ist in mancher Hinsicht nicht ausdrucksstark genug, um die Änderungen in den Distributionsstrukturen zu kommunizieren – was leider zu Problemen für Nutzende führen kann. Wir haben versucht, Qiskit dazu zu bringen, schnell und deutlich zu scheitern, wenn es eine ungültige Umgebung erkennt, ohne falsch positive Meldungen. Wir verstehen, dass Nutzende es störend finden können, diese Fehlermeldung zu erhalten, aber unserer Erfahrung nach ist es viel besser, das Problem sofort zu bemerken, als dass alles auf der Oberfläche zu funktionieren scheint und erst später auf subtile Weise fehlschlägt.

Dieser Abschnitt enthält Paketierungsfehler, die auftreten können, und beschreibt, wie sie behoben werden können.

Die meisten dieser Probleme sind nicht spezifisch für Qiskit, daher ist der Rat wahrscheinlich auch relevant, wenn die problematischen Teile nicht mit Qiskit zusammenhängen.

import qiskit meldet „ModuleNotFoundError: No module named 'qiskit'"

Python kann deine Qiskit-Installation nicht finden.

Wenn du Qiskit definitiv installiert hast, hast du wahrscheinlich nicht die richtige virtuelle Umgebung aktiviert. Anweisungen dazu findest du im Abschnitt zum Aktivieren einer virtuellen Umgebung.

Wenn du Jupyter verwendest und dies siehst, stelle sicher, dass Jupyter in dieselbe virtuelle Umgebung wie Qiskit installiert ist. Beende Jupyter, aktiviere die Qiskit-Virtualumgebung in der Befehlszeile, führe pip install jupyterlab aus (oder welches Notebook-Interface du verwendest) und öffne Jupyter dann erneut.

import qiskit gelingt, aber jede Aktion gibt „AttributeError: module 'qiskit' has no attribute '...'" zurück

Dies bedeutet wahrscheinlich, dass deine Umgebung eine alte Version von Qiskit enthielt zusammen mit einem Paket, das dessen Namespace erweitert hat (z. B. alte Versionen von Qiskit Aer oder der längst veraltete Qiskit IBM Q® Provider), und dann Qiskit deinstalliert wurde. Am einfachsten ist es, eine neue virtuelle Umgebung zu starten und nur aktuelle, nicht veraltete Pakete zu installieren.

Wenn du gerade eine neue virtuelle Umgebung gestartet hast oder sicher bist, dass veraltete Pakete nicht das Problem sind, stelle sicher, dass dein aktuelles Arbeitsverzeichnis (das Verzeichnis, in dem sich deine Shell-Sitzung beim Start von Python / Jupyter befand) keinen Ordner namens qiskit enthält. Pythons Standardregeln durchsuchen das aktuelle Arbeitsverzeichnis sehr früh im Suchpfad beim Versuch, ein Modul zu importieren, sodass ein Verzeichnis mit einem doppelten Namen Importprobleme verursachen kann.

pip verweigert die gemeinsame Installation einiger Pakete

Nach dem Ausführen eines pip install-Befehls mit vielen Einträgen kann folgender Fehler erscheinen:

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

Dies beschreibt einen echten Auflösungskonflikt; es gibt keine gültige Möglichkeit, alle diese Distributionen gleichzeitig zu installieren.

Im Kontext von Qiskit 1.0 liegt das wahrscheinlich daran, dass eine der zu installierenden Distributionen eine Anforderung wie qiskit<1.0 enthält. Das bedeutet, dass die Entwickelnden dieser Distribution sie als (noch) nicht kompatibel mit Qiskit 1.0 markiert haben.

Du kannst die Entwickelnden (höflich) fragen, wann sie eine neue Version ihres Pakets veröffentlichen werden, die mit Qiskit 1.0 kompatibel ist – prüfe aber zunächst, ob es an dem Ort, wo sie Kommentare akzeptieren, bereits ein offenes Issue oder einen Pull Request dazu gibt. Bedenke, dass dies Zeit braucht; bitte gib den Entwickelnden etwa einen Monat Zeit, um neue Versionen ihrer Distributionen vorzubereiten! Bis dahin kannst du diese Distribution nicht zusammen mit Qiskit 1.0 installieren. Um diese Distribution weiterhin zu verwenden, erstelle eine neue virtuelle Umgebung und verwende Qiskit 0.45 oder 0.46 (oder welche Version unterstützt wird) zusammen mit dem anderen Paket.

vorsicht

Wenn du diesen Fehler erhältst, versuche nicht, die Umgebung aufzubauen, indem du pip install mehrmals aufrufst. Diese Befehle schlagen wahrscheinlich nicht fehl, aber du hast eine ungültige Umgebung erstellt. Anschließend würdest du wahrscheinlich einige der anderen Fehlermeldungen in diesem Abschnitt sehen.

Du kannst auch die Dokumentation der Python Packaging Authority über Konfliktauflösung lesen.

pip ist erfolgreich, gibt aber Fehler nach pip install-Befehlen aus

Möglicherweise siehst du einen Fehler in der Ausgabe von pip, wie den folgenden:

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.

Die erste Zeile erscheint meist wörtlich (ab pip 23.3), die zweite Zeile ändert sich je nach dem genauen Problem, und es kann mehrere solcher Zeilen geben. pip gibt dann wahrscheinlich an, dass es das Gewünschte trotz der Fehlermeldung erfolgreich durchgeführt hat.

Das bedeutet, dass die Umgebung in Konflikt steht und du nicht sicher sein kannst, dass sie korrekt funktioniert. Um das Problem zu lösen, prüfe die Liste der Meldungen von pip und stelle fest, ob du alle Pakete mit widersprüchlichen Anforderungen wirklich benötigst. Manchmal gibt es echte Konflikte zwischen Abhängigkeiten; möglicherweise benötigst du mehrere virtuelle Umgebungen, um Abhängigkeiten mit inkompatiblen Anforderungen zu trennen.

Die sicherste Wahl ist, eine neue virtuelle Umgebung zu erstellen (oder mehrere, wenn es echte Konflikte gibt) und die konfliktbehaftete zu löschen.

Führe beim Einrichten virtueller Umgebungen nur einen einzigen pip install-Befehl aus, der alle benötigten Abhängigkeiten enthält. Das ist der zuverlässigste Weg für pip, eine ordnungsgemäß aufgelöste Umgebung ohne Konflikte zu finden. Wenn nach dem Einrichten von Umgebungen weiterhin Konflikte auftreten, vermeide weitere pip install- oder pip uninstall-Befehle; pip garantiert nicht, dass die Umgebung bei nachfolgenden Befehlen kohärent bleibt.

hinweis

Wenn du dir Sorgen machst, mit mehreren virtuellen Umgebungen zu arbeiten, sei beruhigt: Python-Entwicklung und -Nutzung umfasst oft mehrere virtuelle Umgebungen. Es ist üblich und gute Praxis, neue Umgebungen für separate Projekte zu erstellen. Wenn du mit einer virtuellen Umgebung fertig bist, kannst du ihr Verzeichnis einfach löschen; es gibt keinen Grund, mehrere Umgebungen dauerhaft zu behalten.

import qiskit löst ImportError aus

Beim Ausführen von import qiskit kann folgender Fehler auftreten:

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.

tipp

Du hast möglicherweise einen vollständig gültigen pip install-Befehl ausgeführt und dabei alle Empfehlungen in diesem Leitfaden befolgt und siehst trotzdem diese Fehlermeldung. Das ist nicht dein Fehler, aber die Fehlermeldung ist trotzdem korrekt, und Qiskit kann nicht sicher geladen werden.

Der Fehler bedeutet, dass Qiskit in einer ungültigen Umgebung installiert ist, die sowohl Qiskit 1.0 als auch eine ältere Version enthält. Dies äußert sich darin, dass die qiskit-terra-Distribution zusammen mit Qiskit 1.0 installiert ist. Du kannst prüfen, welche Distributionen installiert sind, indem du pip list ausführst, aber du kannst das nicht einfach durch Deinstallieren von qiskit-terra beheben.

Leider sind qiskit>=1.0 und qiskit-terra konfliktbehaftete Distributionen und können nicht zusammen installiert werden. Noch unglücklicher ist, dass wir diesen Konflikt nicht an pip kommunizieren können, weil das Metadatensystem entsprechende Einschränkungen nicht unterstützt.

Dieser Fehler tritt am häufigsten in einer von zwei Situationen auf:

  • Du hast etwas wie pip install 'qiskit>=1' something-else ausgeführt, und something-else hat eine Anforderung auf qiskit-terra.
  • Du hast versucht, pip install -U qiskit in einer bestehenden Umgebung auszuführen.

In beiden Fällen gibt es keine Garantie, dass pip eine hilfreiche Meldung zurückgibt.

tipp

Eine Möglichkeit, pip dazu zu zwingen, qiskit-terra bei einzelnen install-Befehlen zu verbieten, ist die Verwendung einer Constraints-Datei, die qiskit-terra auf eine unmögliche Version festlegt. Eine Constraints-Datei, die z. B. die Zeile qiskit-terra>=1.0 enthält, bewirkt, dass keine veröffentlichte Version den Anforderungen entspricht, sobald eine Abhängigkeit versucht, qiskit-terra zu installieren.

Wir haben eine solche Datei in einem GitHub Gist unter https://qisk.it/1-0-constraints bereitgestellt, die du wie folgt verwenden kannst:

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

Wenn ein Paket qiskit-terra benötigt, wird ein Auflösungsfehler angezeigt.

Eine funktionierende Umgebung für Qiskit 1.0 erstellen

Egal wie es dazu gekommen ist – es ist viel einfacher, eine neue virtuelle Umgebung anzulegen.

Zunächst müssen wir herausfinden, welche Pakete eine Abhängigkeit auf qiskit-terra einführen. Installiere in der defekten Umgebung pipdeptree von PyPI. Das ist ein Werkzeug zum Erstellen von Abhängigkeitsgraphen:

pip install pipdeptree

Frage ab, welche Pakete Abhängigkeiten auf qiskit-terra und qiskit einführen (dies sind zwei separate Befehle):

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

Die Ausgaben könnten in etwa so aussehen:

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]

Im obigen Beispiel haben wir zwei Distributionen, die sich als kompatibel mit Qiskit 1.0 erklärt haben (qiskit-aer und qiskit-ibm-provider), und eine, die noch eine Abhängigkeit auf qiskit-terra hat.

tipp

Dieses Beispiel zeigt eine flache Abhängigkeitsstruktur. Du könntest einen viel tieferen Baum sehen. Die Pakete, die direkt von qiskit-terra abhängen (geringste Einrückung), sind am wahrscheinlichsten die problematischen, aber eines weiter unten im Baum könnte problematisch sein, wenn es von einer bestimmten alten Version eines anderen Pakets abhängt, das bereits aktualisiert wurde.

Eine Abhängigkeit auf qiskit-terra kann mehrere Bedeutungen haben:

  • Das abhängige Paket ist alt und wird nicht aktualisiert, um Qiskit 1.0 zu unterstützen.

    In diesem Fall besteht keine Möglichkeit, das Paket mit Qiskit 1.0 zu verwenden, und du musst eine frühere Version von Qiskit weiterhin verwenden. Typischerweise erkennst du dies daran, dass das abhängige Paket in seiner neuesten Version vorliegt (vorausgesetzt, die Umgebung ist neu und du hast keine niedrigere Version angeheftet) und eine direkte Anforderung auf qiskit-terra hat.

  • Das abhängige Paket wird aktiv gepflegt, unterstützt Qiskit 1.0 aber noch nicht.

    In diesem Fall musst du warten, bis die Entwickelnden eine kompatible Version veröffentlichen – bitte hab Geduld! Typischerweise erkennst du dies daran, dass die installierte Distribution nicht in ihrer neuesten Version ist, obwohl dein Installationsbefehl keine Version angegeben hat. Du kannst die neueste Version der Distribution prüfen, indem du ihre Seite auf https://pypi.org/ aufrufst.

    pip hat wahrscheinlich alte Versionen des Pakets durchsucht, bis es eine gefunden hat (möglicherweise von vor Monaten oder Jahren), die nur von qiskit-terra abhängt.

    Das ist es, was im obigen Beispiel passiert ist. Zum Zeitpunkt der Erstellung dieses Dokuments war qiskit-dynamics==0.4.4 die neueste Version.

Wenn du diese Umgebung mit mehreren pip install-Befehlen erstellt hast (z. B. weil die Umgebung alt ist und aktualisiert wurde), versuche zunächst, alle deine Pakete mit einem einzigen pip install-Befehl beim Aufbau einer neuen Umgebung zu installieren. Wenn das Problem weiterhin besteht, unterstützt mindestens eines der gewünschten Pakete Qiskit 1.0 noch nicht, und pip findet eine alte Version, die es für funktionierend hält, weil es den qiskit>=1/qiskit-terra-Konflikt nicht kennt.

Verwende stattdessen die pipdeptree-Befehle, um festzustellen, welche Abhängigkeiten Qiskit 1.0 noch nicht unterstützen. Schließe Pakete aus, die Qiskit 1.0 noch nicht unterstützen, wenn du eine Qiskit-1.0-Umgebung aufbaust, oder verwende weiterhin eine frühere Version von Qiskit. Anweisungen findest du unter Neue Umgebung erstellen.

hinweis

Das Beispiel in diesem Abschnitt wurde vor der Veröffentlichung von Qiskit 1.0 erstellt.

Die „alte" Distribution in Frage (qiskit-dynamics) verhielt sich korrekt; es war nicht bekannt, dass sie Qiskit 1.0 unterstützt, daher wurde das in den Anforderungen vermerkt. Es ist nicht möglich, Anforderungsänderungen für bereits veröffentlichte Versionen rückwirkend zu ändern, und pip sucht beim Aufbau einer Umgebung beliebig weit zurück, um etwas Funktionierendes zu finden.

Eine funktionierende Umgebung für Qiskit 0.45 oder 0.46 erstellen

Wenn du nach einem Versuch, Qiskit 0.45 oder 0.46 zu installieren, eine defekte Umgebung hast, liegt das wahrscheinlich daran, dass pip Qiskit 1.0 installiert hat, weil es versucht hat, die neuesten Versionen der Pakete auszuwählen, obwohl das nicht erforderlich war. Am einfachsten lässt sich das beheben, indem du eine neue virtuelle Umgebung erstellst und dann einen einzigen pip install-Befehl ausführst, der alle benötigten Pakete sowie einen expliziten 'qiskit<1'-Eintrag enthält. Wenn pip diesen Abhängigkeitsgraph erfolgreich auflöst, solltest du eine funktionierende virtuelle Umgebung haben. Wenn mindestens eine Distribution Qiskit 1.0 oder höher erfordert, sollte pip eine erklärende Fehlermeldung ausgeben, die wie die im Abschnitt über fehlgeschlagene Auflösungen aussieht.

Du kannst auch die in Eine funktionierende Umgebung für Qiskit 1.0 erstellen aufgeführten pipdeptree-Befehle aus der defekten Umgebung heraus verwenden, um festzustellen, welche Distributionen eine explizite Anforderung auf qiskit>=1 haben.

Ich bin Entwickler, meine Umgebungen sind definitiv korrekt, und ich bekomme den Fehler trotzdem

Zunächst: Du musst absolut sicher sein, dass deine Umgebungen korrekt sind. Der Test, den Qiskit verwendet, um eine defekte Umgebung zu erkennen, ist ziemlich robust; er fragt importlib.metadata nach Distributionsinformationen zu installierten Paketen ab und überprüft die zurückgegebenen Versionsnummern. Die Qiskit-1.0-Seite des Tests prüft auch auf Sentinel-Dateien, die in alten Qiskit-Versionen vorhanden waren, aber nicht in Qiskit 1.0.

Wenn du ein Qiskit-Entwickler bist, ist es möglich, dass du alte qiskit.egg-info- oder qiskit-terra.egg-info-Verzeichnisse (oder *.dist-info-Verzeichnisse) auf deinem Meta-Pfad hast (siehe sys.meta_path), die von alten editierbaren Installationen übrig geblieben sind. Prüfe insbesondere dein Arbeitsverzeichnis auf *.egg-info- und *.dist-info-Verzeichnisse. Wenn sie im Stammverzeichnis eines deiner ausgecheckten Repositories sind, kannst du sie löschen. Das Schlimmste, was passieren kann, ist, dass du möglicherweise erneut pip install -e . ausführen musst – und selbst das ist unwahrscheinlich, da diese Dateien typischerweise nur Teil des setuptools-Build-Prozesses sind und nicht bereinigt werden.

Wenn die obigen Informationen dir nicht helfen und du dir zu 100 % sicher bist, dass deine Umgebung in Ordnung ist (oder du absichtlich eine defekte Umgebung testest):

  1. Erstelle ein Issue in Qiskit und erkläre, wie das passiert ist und warum du sicher bist, dass die Umgebung korrekt ist, damit wir es beheben können.
  2. Du kannst die Ausnahme unterdrücken, indem du die Umgebungsvariable QISKIT_SUPPRESS_1_0_IMPORT_ERROR=1 setzt.