Instala el nuevo paquete Qiskit 1.0
Qiskit 1.0 utiliza una estructura de empaquetado diferente a la de versiones anteriores de Qiskit, y es probable que cause problemas en entornos que usen paquetes que aún no son compatibles con Qiskit 1.0.
No intentes actualizar un entorno virtual de Python existente a Qiskit 1.0 en el mismo lugar.
No realizaremos cambios de empaquetado tan disruptivos en el futuro. Este es un evento único, en el lanzamiento de Qiskit 1.0, específicamente para que nuestra gestión de paquetes sea lo más sencilla posible de aquí en adelante.
Esta gu ía está dividida en las siguientes secciones. Solo necesitas revisar las que sean relevantes para ti.
- Los usuarios deben leer la sección Para usuarios.
- Si desarrollas o mantienes un paquete que depende de Qiskit, lee la sección Para desarrolladores.
- Si encuentras problemas al instalar o importar Qiskit 1.0, revisa la sección Solución de problemas.
Si te interesa entender la estructura de paquetes antigua y por qué cambió, consulta el resumen de los cambios disruptivos de empaquetado.
Para usuarios
Debes crear un nuevo entorno virtual para instalar Qiskit 1.0. Actualizar una instalación existente a Qiskit 1.0 en el mismo lugar es muy complicado y propenso a errores.
Los ejemplos de esta sección usan el módulo venv, que forma parte de la biblioteca estándar de Python.
Si usas una herramienta diferente, como virtualenv o conda, consulta su documentación para obtener ayuda.
Para los comandos de Linux y macOS se usa una sintaxis similar a bash. Para los comandos de Windows se usa PowerShell.
Crea el nuevo entorno
-
Crea un nuevo entorno virtual en cada directorio de proyecto en el que estés trabajando, usando tu versión preferida de Python 3.8 o posterior.
- macOS
- Linux
- Windows
python3 -m venv .venvpython3 -m venv .venvpython -m venv .venv
-
Activa el entorno.
- macOS
- Linux
- Windows
source .venv/bin/activatesource .venv/bin/activate.venv\Scripts\activate.ps1 -
Instala los paquetes que necesites. Lo ideal es hacerlo con un único comando
pip installque incluya todas las dependencias.pip install 'qiskit>=1'Opcionalmente puedes incluir paquetes adicionales como argumentos. Por ejemplo:
pip install 'qiskit>=1' jupyterlab pandas matplotlibQiskit 1.0 incluye cambios disruptivos, por lo que varios paquetes están marcados como aún no compatibles con él. Por eso, es posible que veas errores de
piphasta que se publiquen nuevas versiones de esos paquetes. Las versiones antiguas de algunos paquetes también pueden depender del paquete heredadoqiskit-terra. Esos paquetes podrían no devolver errores al ejecutar este comando, pero sí lanzar un error al hacerimport qiskit. No deberías instalar ningún paquete que dependa directamente deqiskit-terra.consejoUna forma de obligar a
pipa prohibirqiskit-terraen comandosinstallindividuales es usar un archivo de restricciones que establezcaqiskit-terraen una versión imposible. Por ejemplo, un archivo de restricciones que incluya la líneaqiskit-terra>=1.0hará que, si una dependencia intenta instalarqiskit-terra, ninguna versión publicada cumpla los requisitos.Hemos proporcionado dicho archivo en un GitHub Gist en https://qisk.it/1-0-constraints, que puedes usar así:
pip install -c https://qisk.it/1-0-constraints qiskit [other packages]Si un paquete requiere
qiskit-terra, verás un fallo de resolución.precauciónNo instales paquetes incompatibles con Qiskit 1.0 en este entorno virtual. Si necesitas usar esos paquetes, instálalos en un entorno virtual separado con Qiskit 0.45 o 0.46.
Si tienes un entorno existente, puedes usar
pipdeptreepara consultar los requisitos de tus paquetes instalados y ver si alguno requiereqiskit<1. Para los que lo requieran, busca actualizaciones que los hagan compatibles con Qiskit 1.0.Si encuentras problemas, consulta la sección de solución de problemas, o pregunta en Qiskit Slack. Si crees que hay un error, puedes crear un issue en Qiskit.
-
Si no vas a usar el entorno de inmediato, usa el comando
deactivatepara salir de él.
Usa el nuevo entorno
Cada vez que inicies una nueva sesión de línea de comandos, debes navegar al directorio de tu proyecto y "activar" el entorno ejecutando el comando activate:
- macOS
- Linux
- Windows
source .venv/bin/activate
source .venv/bin/activate
.venv\Scripts\activate.ps1
Para desarrolladores
Si mantienes un paquete que depende de Qiskit, usa esta información para aprender a expresar correctamente tu compatibilidad y a probar contra Qiskit 1.0.
Recomendaciones para los requisitos
Recomendamos que tu paquete requiera qiskit>=0.45,<1 (u otro límite inferior apropiado) si no estás seguro de si el paquete es compatible con Qiskit 1.0.
Esta es la misma recomendación que se hace para la compatibilidad con NumPy 2.0.
Se publicará un candidato a lanzamiento de Qiskit 1.0, la versión 1.0.0rc1, el 1 de febrero de 2024. Deberías probar tu paquete contra esta versión y, lo antes posible, publicar una nueva versión (compatible) de tu paquete con el requisito superior sin fijar.
Recomendaciones para probar contra Qiskit 1.0
Estas recomendaciones aplican tanto a las pruebas proactivas contra la rama main de Qiskit como a las pruebas contra el candidato a lanzamiento 1.0.0rc1 (y versiones posteriores, si aplica).
No recomendamos proteger ramas en CI con éxito contra la rama main de Qiskit inicialmente, porque los cambios en Qiskit podrían impedirte fusionar PRs.
Después del lanzamiento de los candidatos a lanzamiento de Qiskit, y cuando todas las dependencias de tu paquete soporten Qiskit 1.0, sí recomendamos proteger ramas con éxito contra el último candidato a lanzamiento, para garantizar que el paquete siga siendo compatible con Qiskit 1.0.
Si ni tu paquete ni ninguna de sus dependencias transitivas tiene un requisito fijado en qiskit<1, deberías crear un entorno virtual de pruebas como lo harías normalmente, en un único comando pip install, y especificar directamente qiskit==1.0.0rc1 o qiskit==git+https://github.com/Qiskit/qiskit.git@main según corresponda.
Esta es la forma más confiable de asegurarte de tener un entorno completamente válido.
Si el único componente del grafo de dependencias de tu paquete que tiene un requisito fijado en qiskit<1 es tu propio paquete, puede que quieras que tu suite de CI parchee temporalmente tu archivo de requisitos para permitir Qiskit 1.0 e instale el entorno en un solo paso como antes.
Alternativamente, usa las siguientes reglas para actualizaciones de entorno de propósito general, pero cambia a la resolución de entorno único tan pronto como sea posible.
Si al menos una de tus dependencias transitivas aún no tiene una versión publicada que permita el soporte de Qiskit 1.0, deberás hacer cambios manuales. Hay varias estrategias que puedes intentar, en orden aproximado de preferencia (de más a menos preferible):
- Instala la dependencia problemática desde su propia rama
main, si su versión de desarrollo ya ha relajado el pin, para que puedas construir el entorno de pruebas en un solo paso. - Excluye el uso de esa dependencia del entorno de pruebas, si es posible.
- Crea un entorno de pruebas de la misma forma que lo harías normalmente, y luego anúlalo manualmente para usar Qiskit 1.0.
Actualizar manualmente un entorno existente
Este proceso crea deliberadamente un entorno inválido. Por lo tanto, cualquier prueba que lo use es menos válida. Las pruebas podrían parecer que pasan, pero esto no garantiza que el paquete sea compatible con Qiskit 1.0. Esto puede ocurrir porque el entorno no es autoconsistente y podría contener archivos que no existen en un entorno válido, o porque el comportamiento de un paquete anulado podría cambiar con Qiskit 1.0.
Si una de tus dependencias fija qiskit<1 incluso en su rama de desarrollo, es posible que no funcione de ninguna manera con Qiskit 1.0, y si tus pruebas no pueden ejecutarse por esto, puede que tengas que esperar a que sean compatibles (o trabajar con ellos para lograrlo).
Para actualizar un entorno en el lugar, sigue estos pasos:
-
Crea un entorno de la forma habitual, asegurándote de que no haya paquetes instalados que extiendan el espacio de nombres de
qiskitoqiskit.providers. -
Desinstala tanto
qiskitcomoqiskit-terrapara asegurarte de que ninguno esté presente:
pip uninstall --yes qiskit qiskit-terra
En este punto, el directorio site-packages del entorno no debería contener un directorio qiskit. No es necesario verificar esto en cada ejecución de CI, pero si estás depurando un script localmente, sigue estos pasos para comprobarlo:
- Ejecuta el siguiente comando desde dentro del
pythondel entorno virtual:
import site
print(site.getsitepackages())
-
Verifica que esos directorios no contengan un directorio
qiskit. Si lo contienen, probablemente tienes instalados paquetes que extienden el espacio de nombres y deberías encontrarlos y eliminar la dependencia. -
Instala la versión objetivo de Qiskit 1.0 con uno de estos comandos:
- Una vez publicado el candidato a lanzamiento deseado:
pip install 'qiskit==1.0.0rc1' - Para una dependencia de la rama
main(o sustituye el identificador de revisióngitque prefieras después del@):pip install 'git+https://github.com/Qiskit/qiskit.git@main'
Ahora tienes un entorno en el que Qiskit te permite hacer pruebas. Si import qiskit produce un ImportError, o si tienes dificultades para encontrar tus dependencias, consulta el apartado sobre las protecciones de entorno inválido en Qiskit.
Ejemplos de flujos de trabajo manuales para GitHub Actions
Los siguientes flujos de trabajo configuran un trabajo programado para ejecutarse cada noche. Este trabajo prepara un entorno de pruebas para Qiskit 1.0 y ejecuta pytest (o los pasos de prueba que necesites).
Para un paquete que no tiene dependencias transitivas con 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
Para un paquete que tiene dependencias transitivas inevitables que fijan qiskit<1, construye un entorno inválido:
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
Ejemplo de configuración de tox
Los siguientes son ejemplos de secciones de tox.ini para construir un entorno de pruebas para Qiskit 1.0 y ejecutar pytest (o los pasos de prueba que necesites).
Si nada impide que Qiskit 1.0 se instale en un entorno válido:
[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 tu paquete o una dependencia transitiva tiene un pin inevitable en qiskit<1, recomendamos hacer estas pruebas usando la construcción manual del entorno como en la sección anterior, porque tox introduce varias complejidades al ser más estricto sobre el aislamiento del entorno y el orden de instalación.
Este es el comportamiento correcto de tox (no deberíamos construir un entorno inválido), pero como ya sabemos que estamos construyendo un entorno inválido, estas comprobaciones se interponen.
[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.
Resolución de problemas
Los cambios de empaquetado en torno a Qiskit 1.0 son complicados, y la herramienta estándar de Python pip no es suficientemente expresiva en algunos aspectos para que podamos comunicarle los cambios en las estructuras de distribución, lo que lamentablemente puede causar problemas a los usuarios.
Hemos intentado que Qiskit falle de forma rápida y explícita si detecta un entorno no válido, sin generar falsos positivos.
Entendemos que puede resultar molesto recibir el mensaje de error, pero en nuestra experiencia es mucho mejor ser consciente del problema de inmediato que aparentar que todo funciona correctamente para luego fallar de forma sutil en el futuro.
Esta sección contiene errores de empaquetado que podrías encontrar y describe cómo resolverlos.
La mayoría de estos problemas no son exclusivos de Qiskit, por lo que el consejo probablemente sea relevante aunque las partes problemáticas no estén relacionadas con Qiskit.
import qiskit indica "ModuleNotFoundError: No module named 'qiskit'"
Python no puede encontrar tu instalación de Qiskit.
Si definitivamente instalaste Qiskit, probablemente no tienes el entorno virtual correcto activado. Consulta la sección sobre cómo activar un entorno virtual para obtener instrucciones.
Si estás usando Jupyter y ves esto, asegúrate de que Jupyter esté instalado en el mismo entorno virtual que Qiskit.
Sal de Jupyter, activa el entorno virtual de Qiskit en la línea de comandos, ejecuta pip install jupyterlab (o la interfaz de notebook que uses) y vuelve a abrir Jupyter.
import qiskit tiene éxito, pero intentar hacer cualquier cosa devuelve "AttributeError: module 'qiskit' has no attribute '...'"
Probablemente esto significa que tu entorno tenía una versión antigua de Qiskit junto con un paquete que extendía su espacio de nombres (como versiones antiguas de Qiskit Aer, o el ya obsoleto Qiskit IBM Q® Provider), y luego Qiskit fue desinstalado. Lo más sencillo es iniciar un nuevo entorno virtual e instalar únicamente paquetes recientes y no obsoletos.
Si acabas de crear un nuevo entorno virtual, o estás seguro de que los paquetes heredados no son el problema, asegúrate de que tu directorio de trabajo actual (el directorio en el que estaba tu sesión de shell cuando lanzaste Python / Jupyter) no contenga una carpeta llamada qiskit.
Las reglas predeterminadas de Python buscan en el directorio de trabajo actual muy al principio de la ruta de búsqueda al intentar hacer import de un módulo, por lo que un directorio con un nombre duplicado puede causar problemas de importación.