Installer le nouveau package Qiskit 1.0
Qiskit 1.0 utilise une structure de packaging différente des versions précédentes, ce qui risque de causer des problèmes dans les environnements qui font appel à des packages non encore compatibles avec Qiskit 1.0.
N'essaie pas de mettre à jour un environnement virtuel Python existant vers Qiskit 1.0 en place.
Nous ne ferons pas de changements de packaging aussi importants à l'avenir. Il s'agit d'un événement unique, lors de la sortie de Qiskit 1.0, précisément pour que notre gestion des packages soit aussi simple que possible par la suite.
Ce guide est divisé en plusieurs sections. Tu n'as besoin de consulter que celles qui te concernent.
- Les utilisateurs doivent lire la section Pour les utilisateurs.
- Si tu développes ou maintiens un package qui dépend de Qiskit, lis la section Pour les développeurs.
- Si tu rencontres des problèmes lors de l'installation ou de l'importation de Qiskit 1.0, consulte la section Dépannage.
Si tu veux comprendre l'ancienne structure de packages et pourquoi elle a changé, consulte la vue d'ensemble des changements de packaging importants.
Pour les utilisateurs
Tu dois créer un nouvel environnement virtuel pour installer Qiskit 1.0. Mettre à jour une installation existante vers Qiskit 1.0 en place est très délicat et source d'erreurs.
Les exemples de cette section utilisent le module venv qui fait partie de la bibliothèque standard Python.
Si tu utilises un autre outil, comme virtualenv ou conda, consulte sa documentation pour obtenir de l'aide.
Pour les commandes Linux et macOS, une syntaxe de type bash est utilisée. PowerShell est utilisé pour les commandes Windows.
Créer le nouvel environnement
-
Crée un nouvel environnement virtuel dans chaque répertoire de projet sur lequel tu travailles, en utilisant ta version préférée de Python 3.8 ou ultérieure.
- macOS
- Linux
- Windows
python3 -m venv .venvpython3 -m venv .venvpython -m venv .venv
-
Active l'environnement.
- macOS
- Linux
- Windows
source .venv/bin/activatesource .venv/bin/activate.venv\Scripts\activate.ps1 -
Installe les packages souhaités. Pour cela, utilise une seule commande
pip installavec toutes les dépendances.pip install 'qiskit>=1'Tu peux éventuellement inclure des packages supplémentaires en les ajoutant comme arguments. Par exemple :
pip install 'qiskit>=1' jupyterlab pandas matplotlibQiskit 1.0 introduit des changements incompatibles, donc plusieurs packages sont marqués comme non encore compatibles. Il est possible que
pipretourne des erreurs jusqu'à la publication de nouvelles versions de ces packages. Les anciennes versions de certains packages peuvent également dépendre de l'ancien packageqiskit-terra. Ces packages ne retourneront peut-être pas d'erreur lors de l'exécution de cette commande, mais pourraient lever une erreur lors deimport qiskit. Tu ne dois installer aucun package qui dépend directement deqiskit-terra.conseilUne façon d'interdire à
pipd'installerqiskit-terralors de commandesinstallindividuelles est d'utiliser un fichier de contraintes qui impose àqiskit-terraune version impossible. Par exemple, un fichier de contraintes contenant la ligneqiskit-terra>=1.0signifie que si une dépendance tente d'installerqiskit-terra, aucune version publiée ne correspondra aux exigences.Nous avons fourni un tel fichier dans un GitHub Gist à l'adresse https://qisk.it/1-0-constraints, que tu peux utiliser comme suit :
pip install -c https://qisk.it/1-0-constraints qiskit [other packages]Si un package nécessite
qiskit-terra, tu verras un échec de résolution.attentionN'installe pas de packages incompatibles avec Qiskit 1.0 dans cet environnement virtuel. Si tu as besoin d'utiliser de tels packages, installe-les dans un environnement virtuel séparé avec Qiskit 0.45 ou 0.46.
Si tu as un environnement existant, tu peux utiliser
pipdeptreepour interroger les dépendances de tes packages installés et voir s'ils exigentqiskit<1. Pour ceux qui le font, vérifie s'il existe des mises à jour les rendant compatibles avec Qiskit 1.0.Si tu rencontres des problèmes, consulte la section dépannage, ou demande sur Qiskit Slack. Si tu penses qu'il s'agit d'un bug, tu peux créer un ticket sur Qiskit.
-
Si tu ne prévois pas d'utiliser l'environnement immédiatement, utilise la commande
deactivatepour le quitter.
Utiliser le nouvel environnement
Chaque fois que tu démarres une nouvelle session de ligne de commande, tu dois naviguer jusqu'au répertoire de ton projet et « activer » l'environnement en exécutant la commande activate :
- macOS
- Linux
- Windows
source .venv/bin/activate
source .venv/bin/activate
.venv\Scripts\activate.ps1
Pour les développeurs
Si tu maintiens un package qui dépend de Qiskit, utilise ces informations pour savoir comment exprimer correctement ta compatibilité et tester ton package contre Qiskit 1.0.
Recommandations pour les dépendances
Nous recommandons que ton package exige qiskit>=0.45,<1 (ou une borne inférieure appropriée) si tu n'es pas certain que le package est compatible avec Qiskit 1.0.
C'est la même recommandation que celle formulée pour la compatibilité avec NumPy 2.0.
Un release candidate de Qiskit 1.0, la version 1.0.0rc1, sera publié le 1er février 2024. Tu devrais tester ton package contre cette version et, dès que possible, publier une nouvelle version (compatible) de ton package en supprimant la contrainte de version supérieure.
Recommandations pour tester contre Qiskit 1.0
Ces recommandations s'appliquent aussi bien aux tests proactifs contre la branche main de Qiskit qu'aux tests contre le release candidate 1.0.0rc1 (et les versions suivantes, le cas échéant).
Nous ne recommandons pas de protéger initialement les branches sur le succès CI contre la branche main de Qiskit, car des changements dans Qiskit pourraient t'empêcher de fusionner des PRs.
Après la publication des release candidates de Qiskit, et une fois que toutes les dépendances de ton package prennent en charge Qiskit 1.0, nous recommandons de protéger les branches sur le succès contre le dernier release candidate, afin de garantir que le package reste compatible avec Qiskit 1.0.
Si ni ton package ni aucune de ses dépendances transitives n'a de contrainte de version sur qiskit<1, tu devrais créer un environnement virtuel de test comme tu le ferais normalement, dans une seule commande pip install, en spécifiant directement qiskit==1.0.0rc1 ou qiskit==git+https://github.com/Qiskit/qiskit.git@main selon le cas.
C'est le moyen le plus fiable de s'assurer que tu as un environnement complètement valide.
Si le seul composant du graphe de dépendances de ton package qui a une contrainte de version sur qiskit<1 est ton propre package, tu pourrais vouloir que ta suite CI commence par patcher temporairement ton fichier de dépendances pour autoriser Qiskit 1.0, puis installe l'environnement en une seule étape comme avant.
Sinon, utilise les règles suivantes pour les mises à niveau d'environnement à usage général, mais passe à la résolution en environnement unique dès que possible.
Si au moins une de tes dépendances transitives ne dispose pas encore d'une version publiée qui autorise la prise en charge de Qiskit 1.0, tu dois apporter des modifications manuelles. Il existe plusieurs stratégies à essayer, dans un ordre approximatif de préférence (de la plus préférable à la moins préférable) :
- Installe la dépendance problématique depuis sa propre branche
main, si sa version de développement a assoupli la contrainte, afin de pouvoir construire l'environnement de test en une seule étape. - Exclure l'utilisation de cette dépendance de l'environnement de test, si possible.
- Créer un environnement de test de la même manière que d'habitude, puis le forcer manuellement à utiliser Qiskit 1.0.
Mettre à niveau manuellement un environnement existant
Ce processus crée délibérément un environnement invalide. Par conséquent, tout test l'utilisant est moins valide. Les tests peuvent sembler réussir, mais cela ne garantit pas que le package est compatible avec Qiskit 1.0. Cela peut se produire parce que l'environnement n'est pas cohérent et pourrait contenir des fichiers qui n'existent pas dans un environnement valide, ou le comportement d'un package remplacé pourrait changer avec Qiskit 1.0.
Si l'une de tes dépendances impose qiskit<1 même sur sa branche de développement, il se peut qu'elle ne fonctionne pas du tout avec Qiskit 1.0 et, si tes tests ne peuvent pas s'exécuter à cause de ça, tu devras peut-être attendre qu'elle (ou travailler avec elle pour) devienne compatible.
Pour mettre à niveau un environnement en place, suis ces étapes :
-
Crée un environnement comme d'habitude, en t'assurant qu'aucun package étendant l'espace de noms
qiskitouqiskit.providersn'est installé. -
Désinstalle à la fois
qiskitetqiskit-terrapour t'assurer qu'aucun des deux n'est présent :
pip uninstall --yes qiskit qiskit-terra
À ce stade, le répertoire site-packages de l'environnement ne devrait pas contenir de répertoire qiskit. Tu n'as pas besoin de vérifier cela à chaque exécution CI, mais si tu débogues un script localement, suis ces étapes pour vérifier :
- Exécute la commande suivante depuis le
pythonde l'environnement virtuel :
import site
print(site.getsitepackages())
-
Vérifie que ces répertoires ne contiennent pas de répertoire
qiskit. S'ils en contiennent un, tu as probablement des packages étendant l'espace de noms installés, et tu dois les trouver et supprimer la dépendance. -
Installe la version cible de Qiskit 1.0 avec l'une de ces commandes :
- Une fois le release candidate souhaité publié :
pip install 'qiskit==1.0.0rc1' - Pour une dépendance sur la branche
main(ou substitue l'identifiant de révisiongitque tu préfères après le@).pip install 'git+https://github.com/Qiskit/qiskit.git@main'
Tu disposes maintenant d'un environnement dans lequel Qiskit te permet d'effectuer des tests. Si import qiskit provoque une ImportError, ou si tu as du mal à trouver tes dépendances, consulte les conseils dans la section sur les protections d'environnement invalide dans Qiskit.
Exemples de workflows GitHub Actions manuels
Les workflows suivants configurent une tâche planifiée pour s'exécuter la nuit. Cette tâche met en place un environnement de test pour Qiskit 1.0 et exécute pytest (ou les étapes de test dont tu as besoin).
Pour un package qui n'a aucune dépendance transitive 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
Pour un package qui a des dépendances transitives inévitables imposant qiskit<1, construis un environnement invalide :
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
Exemple de configuration tox
Voici des exemples de sections tox.ini pour construire un environnement de test pour Qiskit 1.0 et exécuter pytest (ou les étapes de test dont tu as besoin).
Si rien n'empêche Qiskit 1.0 d'être installé dans un environnement valide :
[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`.
Si ton package ou une dépendance transitive a une contrainte inévitable sur qiskit<1, nous recommandons d'effectuer ces tests en utilisant la construction d'environnement manuelle comme dans la section ci-dessus, car tox introduit plusieurs complexités en étant plus strict sur l'isolation de l'environnement et l'ordre d'installation.
C'est un comportement correct de la part de tox (on ne devrait pas construire un environnement invalide), mais comme on sait déjà qu'on construit un environnement invalide, ces vérifications gênent.
[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.
Dépannage
Les changements d'empaquetage autour de Qiskit 1.0 sont complexes, et l'outil standard de Python pip n'est pas assez expressif pour nous permettre de lui communiquer les changements dans les structures de distribution — ce qui peut malheureusement causer des problèmes aux utilisateurs.
Nous avons essayé de faire en sorte que Qiskit échoue rapidement et clairement s'il détecte un environnement invalide, sans faux positifs.
Nous comprenons que le message d'erreur peut sembler agaçant, mais d'après notre expérience, il vaut bien mieux être informé du problème immédiatement plutôt que d'avoir l'impression que tout fonctionne en surface, pour que les choses échouent de manière subtile par la suite.
Cette section présente les erreurs d'empaquetage que tu pourrais rencontrer et explique comment les résoudre.
La plupart de ces problèmes ne sont pas propres à Qiskit, donc les conseils restent pertinents même si les éléments problématiques ne lui sont pas liés.
import qiskit affiche "ModuleNotFoundError: No module named 'qiskit'"
Python ne trouve pas ton installation de Qiskit.
Si tu as bien installé Qiskit, tu n'as probablement pas le bon environnement virtuel activé. Consulte la section sur l'activation d'un environnement virtuel pour les instructions.
Si tu utilises Jupyter et que tu vois cette erreur, assure-toi que Jupyter est installé dans le même environnement virtuel que Qiskit.
Quitte Jupyter, active l'environnement virtuel Qiskit depuis la ligne de commande, exécute pip install jupyterlab (ou l'interface notebook que tu utilises), puis rouvre Jupyter.
import qiskit réussit, mais tenter quoi que ce soit retourne "AttributeError: module 'qiskit' has no attribute '...'"
Cela signifie probablement que ton environnement contenait une ancienne version de Qiskit aux côtés d'un paquet qui étendait son espace de noms (comme les anciennes versions de Qiskit Aer, ou l'obsolète Qiskit IBM Q® Provider), et que Qiskit a ensuite été désinstallé. La solution la plus simple est de démarrer un nouvel environnement virtuel et de n'y installer que des paquets récents et non obsolètes.
Si tu viens de créer un nouvel environnement virtuel, ou si tu es certain que les paquets hérités ne sont pas en cause, vérifie que ton répertoire de travail actuel (le répertoire dans lequel ta session shell se trouvait lors du lancement de Python / Jupyter) ne contient pas un dossier appelé qiskit.
Les règles par défaut de Python placent le répertoire de travail courant très tôt dans le chemin de recherche lors d'un import, donc un répertoire portant un nom en double peut causer des problèmes d'import.
pip refuse d'installer certains paquets ensemble
Après avoir exécuté une commande pip install avec plusieurs éléments, tu pourrais voir une erreur telle que :
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
Il s'agit d'un vrai conflit de résolution : il n'existe aucun moyen valide d'installer toutes ces distributions en même temps.
Dans le contexte de Qiskit 1.0, cela est probablement dû au fait que l'une des distributions que tu essaies d'installer contient une exigence comme qiskit<1.0.
Cela signifie que les développeurs de cette distribution l'ont marquée comme n'étant pas (encore) compatible avec Qiskit 1.0.
Tu peux (poliment) demander à ces développeurs quand ils sortiront une nouvelle version compatible avec Qiskit 1.0, mais vérifie d'abord qu'ils n'ont pas déjà une issue ou une pull request ouverte à ce sujet à l'endroit où ils acceptent les commentaires. Garde à l'esprit que cela prend du temps ; laisse aux développeurs un mois environ pour préparer de nouvelles versions de leurs distributions ! En attendant, tu ne peux pas installer cette distribution aux côtés de Qiskit 1.0. Pour continuer à utiliser cette distribution, crée un nouvel environnement virtuel et utilise Qiskit 0.45 ou 0.46 (ou la version qu'elle supporte) aux côtés de cet autre paquet.
Si tu obtiens cette erreur, n'essaie pas de construire l'environnement en appelant pip install plusieurs fois.
Ces commandes n'échoueront probablement pas, mais tu auras créé un environnement invalide.
Tu verrais alors probablement certains des autres messages d'erreur décrits dans cette section.
Tu peux aussi lire la documentation de la Python Packaging Authority sur la résolution des conflits.
pip réussit mais affiche des erreurs après l'exécution de commandes pip install
Tu pourrais voir une erreur dans la sortie de pip, comme la suivante :
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.
La première ligne apparaît généralement telle quelle (depuis pip 23.3), mais la seconde varie selon le problème exact, et il peut y en avoir plusieurs.
pip indique ensuite probablement qu'il a quand même effectué ce que tu voulais, malgré le message d'erreur.
Cela signifie que l'environnement est en conflit et que tu ne peux pas être certain qu'il fonctionnera correctement.
Pour résoudre le problème, examine la liste des messages de pip et détermine si tu as besoin de tous les paquets dont les exigences sont en conflit.
Il peut parfois y avoir de vrais conflits entre les dépendances ; tu pourrais avoir besoin de plusieurs environnements virtuels pour séparer les dépendances aux exigences incompatibles.
Le choix le plus sûr est de démarrer un nouvel environnement virtuel (ou plusieurs, s'il y a de vrais conflits), puis de supprimer celui en conflit.
Lors de la configuration des environnements virtuels, n'exécute qu'une seule commande pip install qui inclut toutes les dépendances dont tu as besoin.
C'est le moyen le plus fiable pour que pip trouve un environnement correctement résolu sans conflits.
Si tu continues à avoir des problèmes de conflits après la configuration des environnements, évite d'exécuter d'autres commandes pip install ou pip uninstall ; pip ne garantit pas la cohérence de l'environnement lors des commandes suivantes.
Si tu t'inquiètes de travailler avec plusieurs environnements virtuels, sache que le développement et l'utilisation de Python impliquent souvent plusieurs environnements virtuels. C'est une pratique courante et recommandée d'en créer de nouveaux pour travailler sur des projets séparés. Une fois que tu en as terminé avec un environnement virtuel, tu peux simplement supprimer son répertoire ; rien ne t'oblige à conserver plusieurs environnements de façon permanente.
import qiskit lève une ImportError
En exécutant import qiskit, tu pourrais voir une erreur telle que :
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.
Il est possible que tu aies exécuté une commande pip install parfaitement valide, en suivant toutes les recommandations de ce guide, et que tu voies quand même ce message d'erreur.
Ce n'est pas de ta faute, mais le message d'erreur est tout de même correct, et Qiskit ne peut pas se charger en toute sécurité.
L'erreur indique que Qiskit est installé dans un environnement invalide qui contient à la fois Qiskit 1.0 et une version antérieure.
Cela se caractérise par la présence de la distribution qiskit-terra aux côtés de Qiskit 1.0.
Tu peux vérifier quelles distributions sont installées en exécutant pip list, mais tu ne peux pas résoudre ce problème en désinstallant simplement qiskit-terra.
Malheureusement, qiskit>=1.0 et qiskit-terra sont des distributions en conflit et ne peuvent pas être installées ensemble.
Encore plus malheureusement, nous ne pouvons pas communiquer ce conflit à pip en raison de limitations de son système de métadonnées.
Cette erreur survient le plus souvent dans l'une des deux situations suivantes :
- Tu as exécuté quelque chose comme
pip install 'qiskit>=1' autre-chose, etautre-chosea une exigence surqiskit-terra. - Tu as essayé d'exécuter
pip install -U qiskitdans un environnement existant.
Dans ces deux cas, rien ne garantit que pip te retournera un message utile.
Une façon d'obliger pip à interdire qiskit-terra pour les commandes install individuelles est d'utiliser un fichier de contraintes qui impose que qiskit-terra soit défini à une version impossible.
Par exemple, un fichier de contraintes contenant la ligne qiskit-terra>=1.0 signifie que si une dépendance tente d'installer qiskit-terra, aucune version publiée ne correspondra aux exigences.
Nous avons fourni un tel fichier dans un GitHub Gist à l'adresse https://qisk.it/1-0-constraints, que tu peux utiliser comme ceci :
pip install -c https://qisk.it/1-0-constraints qiskit [other packages]
Si un paquet exige qiskit-terra, tu verras un échec de résolution.
Créer un environnement fonctionnel pour Qiskit 1.0
Quelle que soit la façon dont cela s'est produit, il est bien plus simple de créer un nouvel environnement virtuel.
Nous devons d'abord identifier quels paquets introduisent une dépendance sur qiskit-terra.
En utilisant l'environnement cassé, installe pipdeptree depuis PyPI. C'est un outil pour générer des graphes de dépendances :
pip install pipdeptree
Demande-lui quels paquets introduisent des dépendances sur qiskit-terra et qiskit (ce sont deux commandes distinctes) :
pipdeptree --reverse --package qiskit-terra
pipdeptree --reverse --package qiskit
Les sorties pourraient ressembler à quelque chose comme :
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]
Dans l'exemple ci-dessus, deux distributions se sont déclarées compatibles avec Qiskit 1.0 (qiskit-aer et qiskit-ibm-provider), et une a encore une dépendance sur qiskit-terra.
Cet exemple présente une structure de dépendances plate.
Tu pourrais voir un arbre bien plus profond que celui-ci.
Les paquets directement dépendants de qiskit-terra (indentation la plus faible) sont les plus susceptibles d'être problématiques, mais un paquet plus bas dans l'arbre pourrait l'être aussi s'il dépend d'une ancienne version spécifique d'un autre paquet qui a déjà été mis à jour.
La présence d'une dépendance sur qiskit-terra peut signifier plusieurs choses :
-
Le paquet dépendant est ancien et ne sera pas mis à jour pour supporter Qiskit 1.0.
Dans ce cas, il n'y a aucune chance d'utiliser ce paquet avec Qiskit 1.0, et tu devras continuer à utiliser une version précédente de Qiskit. Cela se caractérise typiquement par le fait que le paquet dépendant est à sa dernière version (en supposant que l'environnement est récent et que tu ne l'as pas épinglé à une version inférieure) et qu'il a une exigence directe sur
qiskit-terra. -
Le paquet dépendant est activement maintenu, mais ne supporte pas encore Qiskit 1.0.
Dans ce cas, tu devras attendre que les développeurs publient une version compatible — sois patient ! Cela se caractérise typiquement par le fait que la distribution installée n'est pas à sa dernière version, même si ta commande d'installation ne spécifiait pas de version. Tu peux vérifier la dernière version publiée de la distribution en trouvant sa page sur https://pypi.org/.
pipa probablement parcouru d'anciennes versions du paquet jusqu'à en trouver une (peut-être vieille de plusieurs mois ou années) qui ne dépendait que deqiskit-terra.C'est ce qui s'est passé dans l'exemple ci-dessus. Au moment de la rédaction de ce document,
qiskit-dynamics==0.4.4était la dernière version publiée.
Si tu as construit cet environnement à partir de plusieurs commandes pip install (par exemple si l'environnement est ancien et a été mis à jour), essaie d'abord d'installer tous tes paquets avec une seule commande pip install lors de la création d'un nouvel environnement.
Si le problème persiste, au moins l'un des paquets que tu veux utiliser ne supporte probablement pas encore Qiskit 1.0, et pip trouve une ancienne version qu'il croit fonctionnelle parce qu'il ne connaît pas le conflit qiskit>=1/qiskit-terra.
À la place, utilise les commandes pipdeptree pour identifier quelles dépendances ne supportent pas encore Qiskit 1.0.
Exclus tous les paquets qui ne supportent pas encore Qiskit 1.0 lors de la construction d'un environnement Qiskit 1.0, ou continue à utiliser une version précédente de Qiskit.
Consulte Créer le nouvel environnement pour les instructions.
L'exemple de cette section a été généré avant la sortie de Qiskit 1.0.
La distribution « ancienne » en question (qiskit-dynamics) se comportait correctement ; elle n'était pas connue pour supporter Qiskit 1.0, donc elle l'avait indiqué dans ses exigences.
Il n'est pas possible de modifier rétroactivement les exigences des versions déjà publiées, et pip peut remonter arbitrairement loin pour trouver quelque chose qui fonctionne lors de la construction d'un environnement.
Créer un environnement fonctionnel pour Qiskit 0.45 ou 0.46
Si tu as un environnement cassé après avoir essayé d'installer Qiskit 0.45 ou 0.46, la situation la plus probable est que pip a installé Qiskit 1.0 parce qu'il a tenté de récupérer les dernières versions des paquets, même si ce n'était pas requis.
La façon la plus simple de résoudre cela est de créer un nouvel environnement virtuel, puis d'exécuter une seule commande pip install qui inclut tous les paquets dont tu as besoin, plus une entrée explicite 'qiskit<1'.
Si pip résout avec succès ce graphe de dépendances, tu devrais avoir un environnement virtuel fonctionnel.
Si au moins une distribution exige Qiskit 1.0 ou supérieur, pip devrait te donner un message d'erreur l'expliquant, qui ressemble à celui de la section sur les résolutions en échec.
Tu peux également utiliser les commandes pipdeptree listées dans Créer un environnement fonctionnel pour Qiskit 1.0 depuis l'environnement cassé pour déterminer quelles distributions ont une exigence explicite sur qiskit>=1.
Je suis développeur, mes environnements sont absolument corrects, et j'obtiens quand même l'erreur
Premièrement : tu dois être absolument certain que tes environnements sont corrects.
Le test utilisé par Qiskit pour détecter un environnement cassé est assez robuste ; il interroge notamment importlib.metadata pour les informations de distribution des paquets installés et vérifie les numéros de version retournés.
Le côté Qiskit 1.0 du test vérifie également la présence de fichiers sentinelles qui existaient dans les anciennes versions de Qiskit et non dans Qiskit 1.0.
Si tu es développeur Qiskit, il est possible que tu aies des répertoires qiskit.egg-info ou qiskit-terra.egg-info (ou *.dist-info) anciens présents dans ton meta path (voir sys.meta_path), issus d'anciennes installations en mode éditable.
En particulier, vérifie ton répertoire de travail pour tout répertoire *.egg-info et *.dist-info.
S'ils se trouvent à la racine de l'un de tes dépôts clonés, tu peux les supprimer. Le pire qui puisse arriver est que tu aies à refaire pip install -e ., et même ça est peu probable, car ce sont généralement des artefacts du processus de build de setuptools qui ne sont pas nettoyés automatiquement.
Si les informations ci-dessus ne t'aident pas et que tu es à 100 % certain que ton environnement est sain (ou que tu testes délibérément un environnement cassé) :
- Crée une issue dans Qiskit en expliquant comment cela s'est produit et pourquoi tu es certain que l'environnement est correct, afin que nous puissions le corriger.
- Tu peux supprimer l'exception en définissant la variable d'environnement
QISKIT_SUPPRESS_1_0_IMPORT_ERROR=1.