Installa il nuovo pacchetto Qiskit 1.0
Qiskit 1.0 usa una struttura di packaging diversa rispetto alle versioni precedenti e causerà probabilmente problemi negli ambienti che utilizzano pacchetti non ancora pronti per Qiskit 1.0.
Non cercare di aggiornare un ambiente virtuale Python esistente a Qiskit 1.0 in-place.
Non apporteremo modifiche simili al packaging in futuro. Questo è un evento una tantum, al rilascio di Qiskit 1.0, proprio affinché la gestione del packaging sia il più semplice possibile in futuro.
Questa guida è suddivisa nelle sezioni seguenti. Devi leggere solo le sezioni pertinenti alla tua situazione.
- Gli utenti devono leggere la sezione Per gli utenti.
- Se sviluppi o mantieni un pacchetto che dipende da Qiskit, leggi la sezione Per gli sviluppatori.
- Se incontri problemi durante l'installazione o l'importazione di Qiskit 1.0, consulta la sezione Risoluzione dei problemi.
Se vuoi capire la vecchia struttura dei pacchetti e il motivo del cambiamento, consulta la panoramica delle modifiche di packaging con rottura della compatibilità .
Per gli utenti​
Devi creare un nuovo ambiente virtuale per installare Qiskit 1.0. Aggiornare un'installazione esistente in-place a Qiskit 1.0 è molto complicato e soggetto a errori.
Gli esempi in questa sezione usano il modulo venv, che fa parte della libreria standard di Python.
Se usi uno strumento diverso, come virtualenv o conda, consulta la relativa documentazione.
Per i comandi su Linux e macOS viene usata la sintassi bash. Per i comandi su Windows viene usato PowerShell.
Crea il nuovo ambiente​
-
Crea un nuovo ambiente virtuale in ogni directory di progetto su cui stai lavorando, usando la tua versione preferita di Python 3.8 o successiva.
- macOS
- Linux
- Windows
python3 -m venv .venvpython3 -m venv .venvpython -m venv .venv
-
Attiva l'ambiente.
- macOS
- Linux
- Windows
source .venv/bin/activatesource .venv/bin/activate.venv\Scripts\activate.ps1 -
Installa i pacchetti desiderati. Dovresti farlo usando un unico comando
pip installcon tutte le dipendenze.pip install 'qiskit>=1'Puoi facoltativamente includere pacchetti aggiuntivi come argomenti. Ad esempio:
pip install 'qiskit>=1' jupyterlab pandas matplotlibQiskit 1.0 include modifiche che rompono la compatibilità , quindi diversi pacchetti sono contrassegnati come non ancora compatibili. Potresti quindi vedere errori da
pipfinché non vengono rilasciate nuove versioni di quei pacchetti. Le versioni precedenti dei pacchetti potrebbero anche dipendere dal pacchetto legacyqiskit-terra. Questi pacchetti potrebbero non restituire errori durante l'esecuzione di questo comando, ma potrebbero generare un errore quando eseguiimport qiskit. Non dovresti installare pacchetti che dipendono direttamente daqiskit-terra.suggerimentoUn modo per richiedere a
pipdi vietareqiskit-terranei singoli comandiinstallè usare un file di constraints che impone aqiskit-terrauna versione impossibile. Ad esempio, un file di constraints che include la rigaqiskit-terra>=1.0farà sì che, se una dipendenza tenta di installareqiskit-terra, nessuna versione pubblicata soddisferà i requisiti.Abbiamo messo a disposizione un file di questo tipo in un GitHub Gist all'indirizzo https://qisk.it/1-0-constraints, che puoi usare così:
pip install -c https://qisk.it/1-0-constraints qiskit [other packages]Se un pacchetto richiede
qiskit-terra, vedrai un errore di risoluzione.attenzioneNon installare in questo ambiente virtuale pacchetti incompatibili con Qiskit 1.0. Se hai bisogno di usare tali pacchetti, installali in un ambiente virtuale separato con Qiskit 0.45 o 0.46.
Se hai un ambiente esistente, puoi usare
pipdeptreeper interrogare i requisiti dei tuoi pacchetti installati e verificare se richiedonoqiskit<1. Per quelli che richiedonoqiskit<1, cerca aggiornamenti che li rendano compatibili con Qiskit 1.0.Se incontri problemi, consulta la sezione risoluzione dei problemi, oppure chiedi sul canale Slack di Qiskit. Se pensi che si tratti di un bug, puoi aprire una segnalazione su Qiskit.
-
Se non hai in programma di usare l'ambiente subito, usa il comando
deactivateper uscirne.
Usa il nuovo ambiente​
Ogni volta che avvii una nuova sessione a riga di comando, devi navigare nella directory del progetto e "attivare" l'ambiente eseguendo il comando activate:
- macOS
- Linux
- Windows
source .venv/bin/activate
source .venv/bin/activate
.venv\Scripts\activate.ps1
Per gli sviluppatori​
Se mantieni un pacchetto che dipende da Qiskit, usa queste informazioni per imparare a dichiarare correttamente la compatibilità e testare il tuo codice con Qiskit 1.0.
Raccomandazioni per i requisiti​
Ti consigliamo di richiedere qiskit>=0.45,<1 (o un altro limite inferiore appropriato) se non sei sicuro che il pacchetto sia compatibile con Qiskit 1.0.
Questa è la stessa raccomandazione fatta per la compatibilità con NumPy 2.0.
Una release candidate di Qiskit 1.0, la versione 1.0.0rc1, sarà rilasciata il 1° febbraio 2024. Dovresti testare il tuo pacchetto con questa versione e, appena possibile, rilasciare una nuova versione (compatibile) del pacchetto con il requisito superiore non più fissato.
Raccomandazioni per i test con Qiskit 1.0​
Queste raccomandazioni si applicano ai test proattivi sul branch main di Qiskit e ai test con la release candidate 1.0.0rc1 (e successive, se applicabile).
Non ti consigliamo inizialmente di proteggere i branch in base al successo della CI contro il branch main di Qiskit, perché le modifiche a Qiskit potrebbero impedire il merge delle PR.
Dopo il rilascio delle release candidate di Qiskit, e dopo che tutte le dipendenze del tuo pacchetto supportano Qiskit 1.0, ti consigliamo invece di proteggere i branch in base al successo contro l'ultima release candidate, per assicurarti che il pacchetto rimanga compatibile con Qiskit 1.0.
Se né il tuo pacchetto, né nessuna delle sue dipendenze transitive, ha un requisito fissato su qiskit<1, dovresti creare un ambiente virtuale di test come faresti normalmente, con un unico comando pip install, specificando direttamente qiskit==1.0.0rc1 o qiskit==git+https://github.com/Qiskit/qiskit.git@main a seconda del caso.
Questo è il modo più affidabile per garantire un ambiente completamente valido.
Se l'unico componente del grafo delle dipendenze del tuo pacchetto con un requisito fissato su qiskit<1 è il tuo stesso pacchetto, potresti voler fare in modo che la tua suite CI prima applichi temporaneamente una patch al file dei requisiti per consentire Qiskit 1.0, e poi installi l'ambiente in un unico passaggio come prima.
In alternativa, usa le seguenti regole per gli aggiornamenti generici dell'ambiente, ma passa alla risoluzione con ambiente singolo non appena possibile.
Se almeno una delle tue dipendenze transitive non ha ancora una versione rilasciata che supporta Qiskit 1.0, devi apportare modifiche manuali. Esistono diverse strategie da provare, in ordine approssimativo di preferenza (dalla più alla meno preferibile):
- Installa la dipendenza problematica dal suo branch
main, se la versione in sviluppo ha allentato il requisito, così puoi costruire l'ambiente di test in un unico passaggio. - Escludi l'uso di quella dipendenza dall'ambiente di test, se possibile.
- Crea un ambiente di test nel modo normale, poi sovrascrivilo manualmente per usare Qiskit 1.0.
Aggiornamento manuale di un ambiente esistente​
Questo processo crea deliberatamente un ambiente non valido. Di conseguenza, qualsiasi test che lo utilizza è meno affidabile. I test potrebbero sembrare superati, ma questo non garantisce che il pacchetto sia compatibile con Qiskit 1.0. Ciò può accadere perché l'ambiente non è auto-consistente e potrebbe contenere file che non esistono in un ambiente valido, oppure il comportamento di un pacchetto sovrascritto potrebbe cambiare con Qiskit 1.0.
Se una delle tue dipendenze fissa qiskit<1 anche nel suo branch di sviluppo, potrebbe non funzionare in alcun modo con Qiskit 1.0. Se i tuoi test non riescono a girare a causa di questo, potresti dover aspettare che quella dipendenza (o collaborare con i relativi sviluppatori) diventi compatibile.
Per aggiornare un ambiente in-place, segui questi passaggi:
-
Crea un ambiente come di consueto, assicurandoti che non siano installati pacchetti che estendono il namespace
qiskitoqiskit.providers. -
Disinstalla sia
qiskitcheqiskit-terraper assicurarti che nessuno dei due sia presente:
pip uninstall --yes qiskit qiskit-terra
A questo punto, la cartella site-packages dell'ambiente non dovrebbe contenere una directory qiskit. Non è necessario verificarlo a ogni esecuzione della CI, ma se stai eseguendo il debug di uno script in locale, segui questi passaggi per verificare:
- Esegui il seguente comando dall'interno del
pythondell'ambiente virtuale:
import site
print(site.getsitepackages())
-
Verifica che queste directory non contengano una cartella
qiskit. Se la contengono, probabilmente hai installato pacchetti che estendono il namespace: trovali e rimuovi la dipendenza. -
Installa la versione target di Qiskit 1.0 con uno di questi comandi:
- Dopo che la release candidate desiderata è stata pubblicata:
pip install 'qiskit==1.0.0rc1' - Per una dipendenza dal branch
main(o sostituisci con qualsiasi identificatore di revisionegitpreferito dopo@):pip install 'git+https://github.com/Qiskit/qiskit.git@main'
Ora hai un ambiente in cui Qiskit ti consente di eseguire i test. Se import qiskit restituisce un ImportError, o se hai difficoltà a trovare le dipendenze, consulta il paragrafo sulle protezioni degli ambienti non validi in Qiskit.
Esempi di workflow GitHub Actions manuali​
I seguenti workflow configurano un job pianificato da eseguire di notte. Questo job prepara un ambiente di test per Qiskit 1.0 ed esegue pytest (o qualunque altro passaggio di test tu abbia bisogno).
Per un pacchetto senza dipendenze transitive su 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
Per un pacchetto con dipendenze transitive inevitabili che fissano qiskit<1, costruisci un ambiente non valido:
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
Esempi di configurazione tox​
I seguenti sono esempi di sezioni tox.ini per costruire un ambiente di test per Qiskit 1.0 ed eseguire pytest (o qualunque altro passaggio di test tu abbia bisogno).
Se nulla impedisce l'installazione di Qiskit 1.0 in un ambiente valido:
[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`.
Se il tuo pacchetto o una dipendenza transitiva ha un requisito inevitabile su qiskit<1, ti consigliamo di eseguire questo test usando la costruzione manuale dell'ambiente come descritto nella sezione precedente, perché tox introduce diverse complessità essendo più rigido sull'isolamento dell'ambiente e sull'ordine di installazione.
Questo è un comportamento corretto di tox (non dovremmo costruire un ambiente non valido), ma poiché sappiamo già che stiamo costruendo un ambiente non valido, questi controlli diventano un ostacolo.
[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.
Risoluzione dei problemi​
Le modifiche al packaging di Qiskit 1.0 sono complesse e lo strumento standard di Python pip non è abbastanza ricco per comunicargli i cambiamenti nelle strutture di distribuzione, il che potrebbe purtroppo causare problemi agli utenti.
Abbiamo cercato di far fallire Qiskit in modo rapido e visibile se rileva un ambiente non valido, senza falsi positivi.
Capiamo che ricevere il messaggio di errore possa essere fastidioso, ma nella nostra esperienza è molto meglio essere consapevoli del problema subito, piuttosto che avere qualcosa che sembra funzionare in superficie, salvo poi fallire in modi sottili in futuro.
Questa sezione descrive gli errori di packaging che potresti incontrare e come risolverli.
La maggior parte di questi problemi non è esclusiva di Qiskit, quindi il consiglio è probabilmente rilevante anche se le parti problematiche non riguardano Qiskit.
import qiskit restituisce "ModuleNotFoundError: No module named 'qiskit'"​
Python non riesce a trovare la tua installazione di Qiskit.
Se hai sicuramente installato Qiskit, probabilmente non hai l'ambiente virtuale corretto attivato. Consulta la sezione sull'attivazione di un ambiente virtuale per le istruzioni.
Se stai usando Jupyter e vedi questo errore, assicurati che Jupyter sia installato nello stesso ambiente virtuale di Qiskit.
Esci da Jupyter, attiva l'ambiente virtuale di Qiskit dalla riga di comando, esegui pip install jupyterlab (o qualunque interfaccia notebook tu usi), poi riapri Jupyter.
import qiskit riesce, ma qualsiasi operazione restituisce "AttributeError: module 'qiskit' has no attribute '...'"​
Questo probabilmente significa che il tuo ambiente aveva una vecchia versione di Qiskit insieme a un pacchetto che ne estendeva il namespace (come le vecchie versioni di Qiskit Aer, o il lungo-obsoleto Qiskit IBM Q® Provider), e poi Qiskit è stato disinstallato. La cosa più semplice da fare è creare un nuovo ambiente virtuale e installarci solo pacchetti recenti e non obsoleti.
Se hai appena creato un nuovo ambiente virtuale, o sei sicuro che i pacchetti legacy non siano il problema, assicurati che la tua directory di lavoro corrente (la directory in cui si trovava la sessione della shell quando hai avviato Python / Jupyter) non contenga una cartella chiamata qiskit.
Le regole predefinite di Python cercano la directory di lavoro corrente molto presto nel percorso di ricerca quando tenta di importare un modulo (import), quindi una directory con un nome duplicato può causare problemi di importazione.
pip si rifiuta di installare alcuni pacchetti insieme​
Dopo aver eseguito un comando pip install con molti elementi, potresti vedere un errore come:
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
Questo descrive un vero conflitto di risoluzione: non esiste un modo valido per installare tutte queste distribuzioni contemporaneamente.
Nel contesto di Qiskit 1.0, questo è probabilmente dovuto al fatto che una delle distribuzioni che stai cercando di installare contiene un requisito come qiskit<1.0.
Ciò significa che gli sviluppatori di quella distribuzione l'hanno contrassegnata come non (ancora) compatibile con Qiskit 1.0.
Puoi (cortesemente) chiedere a quegli sviluppatori quando rilasceranno una nuova versione compatibile con Qiskit 1.0, ma prima controlla che non ci siano già issue o pull request aperte che lo richiedono dove accettano commenti. Tieni presente che ci vuole tempo: per favore dai agli sviluppatori un mese circa per preparare le nuove versioni delle loro distribuzioni! Nel frattempo, non puoi installare quella distribuzione insieme a Qiskit 1.0. Per continuare a usarla, crea un nuovo ambiente virtuale e usa Qiskit 0.45 o 0.46 (o la versione supportata da quel pacchetto) insieme all'altro pacchetto.
Se ricevi questo errore, non cercare di costruire l'ambiente chiamando pip install più volte.
Quei comandi probabilmente non falliranno, ma avrai creato un ambiente non valido.
Potresti quindi vedere alcuni degli altri messaggi di errore descritti in questa sezione.
Puoi anche leggere la documentazione della Python Packaging Authority sulla risoluzione dei conflitti.
pip riesce ma stampa errori dopo l'esecuzione dei comandi pip install​
Potresti vedere un errore nell'output di pip, come il seguente:
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 prima riga appare solitamente come mostrata (a partire da pip 23.3), ma la seconda riga cambia a seconda del problema specifico, e potrebbero esserci più righe simili.
pip indicherà probabilmente di aver comunque completato l'operazione richiesta con successo, nonostante il messaggio di errore.
Questo significa che l'ambiente è in conflitto e non puoi essere sicuro che funzionerà correttamente.
Per risolvere il problema, esamina l'elenco dei messaggi di pip e determina se hai bisogno di tutti i pacchetti con requisiti in conflitto.
A volte ci saranno veri conflitti tra dipendenze; potresti aver bisogno di più ambienti virtuali per separare le dipendenze con requisiti incompatibili.
La scelta più sicura è iniziare un nuovo ambiente virtuale (o più di uno, se ci sono veri conflitti), quindi eliminare quello in conflitto.
Quando configuri gli ambienti virtuali, esegui un solo comando pip install che includa tutte le dipendenze necessarie.
Questo è il modo più affidabile per permettere a pip di trovare un ambiente correttamente risolto e privo di conflitti.
Se continui ad avere problemi con i conflitti dopo aver configurato gli ambienti, evita di eseguire ulteriori comandi pip install o pip uninstall; pip non garantisce di mantenere coerente l'ambiente con i comandi successivi.
Se sei preoccupato all'idea di gestire più ambienti virtuali, sappi che lo sviluppo e l'uso di Python spesso implicano diversi ambienti virtuali. È pratica comune e buona crearne di nuovi per lavorare su progetti separati. Quando hai finito con un ambiente virtuale, puoi semplicemente eliminarne la directory; non c'