Back to Claude Scientific Skills

Setup, Versions, and Authentication

skills/qiskit/references/setup.md

2.55.07.9 KB
Original Source

Setup, Versions, and Authentication

Verified Version Baseline

Checked against PyPI and official release notes on 2026-07-23:

DistributionVerified versionPurposePython requirement
qiskit2.5.0Core circuits, operators, transpiler, local statevector primitivesPython 3.10+
qiskit-ibm-runtime0.48.0IBM Quantum Platform service and Runtime primitivesPython 3.10+
qiskit-aer0.17.2High-performance and noisy simulationSee its PyPI metadata
qiskit-algorithms0.4.0VQE, QAOA, Grover, phase estimation, optimizersPython 3.9+
qiskit-nature0.8.0Quantum chemistry and second-quantized problemsPython 3.10+
qiskit-nature-pyscf0.4.0PySCF integration for Qiskit NaturePython 3.8+
qiskit-machine-learning0.9.0Quantum kernels, QNNs, Torch integrationPython 3.10+
qiskit-optimization0.7.0Quadratic programs and quantum optimizersPython 3.9+

The Qiskit GitHub repository published a 2.5.1 patch release on 2026-07-23, but PyPI still served 2.5.0 when this skill was verified. Use the PyPI-available pin for reproducibility and check sources.md before updating it.

Create an Environment

The repository recommends Python 3.13. Qiskit 2.5 supports CPython 3.10 and newer on supported 64-bit platforms.

bash
uv venv --python 3.13
source .venv/bin/activate

On Windows PowerShell:

powershell
uv venv --python 3.13
.venv\Scripts\Activate.ps1

Install the smallest useful set:

bash
# Core SDK
uv pip install "qiskit==2.5.0"

# Core plus Matplotlib/LaTeX visualization dependencies
uv pip install "qiskit[visualization]==2.5.0"

# IBM QPUs and Runtime primitives
uv pip install "qiskit-ibm-runtime==0.48.0"

# High-performance and noisy simulation
uv pip install "qiskit-aer==0.17.2"

For a project, declare the same exact pins with uv add:

bash
uv add "qiskit[visualization]==2.5.0"
uv add "qiskit-ibm-runtime==0.48.0"
uv add "qiskit-aer==0.17.2"

Do not install qiskit-terra. Since Qiskit 1.0, the qiskit distribution owns the complete qiskit package namespace. Aer and application packages remain separate distributions.

Optional Application Packages

Install these only for the corresponding workflow:

bash
uv pip install "qiskit-algorithms==0.4.0"
uv pip install "qiskit-nature==0.8.0" "qiskit-nature-pyscf==0.4.0"
uv pip install "qiskit-machine-learning==0.9.0"
uv pip install "qiskit-optimization==0.7.0"

Resolve all selected packages together in a fresh environment. Do not force-install incompatible distributions with dependency checks disabled.

Verify the Environment

Use the bundled checker:

bash
python scripts/check_environment.py
python scripts/check_environment.py --require-runtime --require-aer
python scripts/check_environment.py --json

Or inspect versions directly:

python
from importlib.metadata import version

for distribution in ("qiskit", "qiskit-ibm-runtime", "qiskit-aer"):
    try:
        print(distribution, version(distribution))
    except Exception:
        print(distribution, "not installed")

Run the local smoke test before configuring cloud access:

bash
python scripts/run_local_primitives.py --shots 256 --seed 7

IBM Quantum Platform Setup

IBM QPU access requires:

  1. An IBM Cloud account.
  2. An IBM Quantum Platform instance or access to an organization's instance.
  3. An IBM Cloud API key.
  4. qiskit-ibm-runtime.

Use the current channel name, ibm_quantum_platform. The old ibm_quantum channel is no longer supported. ibm_cloud currently reaches the upgraded platform but is a legacy alias; use ibm_quantum_platform in new code.

Create and manage API keys through the IBM Cloud API keys page. Find instance names and Cloud Resource Names (CRNs) on the IBM Quantum Platform Instances page.

Trusted Workstation: Save an Account

Put only the named values into the process environment. Never hardcode, print, log, or commit an API key.

bash
export IBM_QUANTUM_API_KEY="set-this-outside-source-control"
# Optional: restrict access to one instance
export IBM_QUANTUM_INSTANCE="instance-name-or-crn"

Then save the account from a trusted machine:

python
import os
from qiskit_ibm_runtime import QiskitRuntimeService

api_key = os.environ["IBM_QUANTUM_API_KEY"]
instance = os.environ.get("IBM_QUANTUM_INSTANCE")

QiskitRuntimeService.save_account(
    channel="ibm_quantum_platform",
    token=api_key,
    instance=instance,
    name="default-platform",
    set_as_default=True,
    overwrite=True,
)

The SDK stores saved credentials in $HOME/.qiskit/qiskit-ibm.json. Do not manually edit, print, upload, or commit this file. Restrict local file access to the current user.

Load saved credentials without putting a token in source:

python
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService(name="default-platform")

If only one default account exists, QiskitRuntimeService() is sufficient.

CI or Ephemeral Machine: Do Not Persist

Inject the two named secrets through the CI secret store and instantiate the service directly:

python
import os
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService(
    channel="ibm_quantum_platform",
    token=os.environ["IBM_QUANTUM_API_KEY"],
    instance=os.environ.get("IBM_QUANTUM_INSTANCE"),
)

Do not call save_account() on a shared runner. Do not dump the environment, the service account object, or exception payloads that may contain request details.

If an API key is exposed, revoke it immediately in IBM Cloud and replace it everywhere it was used.

Confirm Access Without Submitting a Job

The bundled inspector uses saved credentials, performs read-only service queries, and never submits a workload:

bash
python scripts/inspect_runtime.py --min-qubits 5
python scripts/inspect_runtime.py --backend BACKEND_NAME --json

Equivalent minimal check:

python
from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
    operational=True,
    simulator=False,
    min_num_qubits=5,
)
print(backend.name, backend.num_qubits)

Do not hardcode a backend name copied from an old tutorial. Available systems and access rights change.

Local-Only Development

No account or network access is needed for:

  • StatevectorSampler
  • StatevectorEstimator
  • Statevector, DensityMatrix, and other qiskit.quantum_info tools
  • Qiskit Aer simulators
  • fake backends bundled with qiskit-ibm-runtime

Use local primitives for algorithm logic, Aer for larger/noisy simulations, and fake backends for target-aware compilation tests.

Repair a Broken Pre-1.0 Environment

Typical symptoms include:

  • An error saying Qiskit is installed in an invalid environment.
  • Both qiskit-terra and modern qiskit distributions are present.
  • Imports resolve to files left behind by an old namespace-package installation.
  • A notebook kernel uses a different Python interpreter from the activated environment.

The reliable repair is a new environment:

bash
deactivate 2>/dev/null || true
uv venv --python 3.13 .venv-qiskit
source .venv-qiskit/bin/activate
uv pip install "qiskit[visualization]==2.5.0"

Avoid trying to repair a mixed pre-1.0 environment by repeatedly uninstalling individual packages; stale namespace files can remain.

Confirm the active interpreter:

python
import sys
import qiskit

print(sys.executable)
print(qiskit.__version__)
print(qiskit.__file__)

Upgrade Policy

For reproducible work:

  1. Pin all Qiskit distributions.
  2. Record Python, Qiskit, Runtime, Aer, and application-package versions with results.
  3. Read the SDK and Runtime release notes before updating.
  4. Re-run local primitive tests and transpilation snapshots.
  5. Revalidate Runtime option names and execution-mode restrictions.
  6. Upgrade in a new lockfile branch or environment, not in the middle of a paid QPU experiment.