
如何将 Qiskit 1.x 代码迁移到 Qiskit 2.5【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills如果你的代码还在用qiskit-terra、V1Sampler/Estimator、execute(circuit, backend)或backend.configuration()这篇文档给出了把这些代码迁到 Qiskit 2.5 的完整操作路径和验证方式。迁移对照与验证方法来自 scientific-agent-skills 仓库中qiskitskill 的文档migration.md、setup.md、testing.md。版本基线于 2026-07-23 针对 PyPI 校验qiskit2.5.0、qiskit-ibm-runtime0.48.0、qiskit-aer0.17.2。环境要求CPython 3.10 的支持的 64-bit 平台仓库建议使用 Python 3.13。第一步在干净环境中安装不要在旧环境上原地升级文档明确要求不要在一个同时装有旧qiskit-terra和现代qiskit的环境中执行升级。setup 文档列出的典型坏环境症状包括报错提示 Qiskit 安装在 invalid environmentqiskit-terra与现代qiskit同时存在import 解析到旧 namespace 包安装留下的残留文件notebook kernel 使用的解释器与激活的环境不一致。可靠的修复方式是新建虚拟环境而不是逐个卸载旧包残留的 namespace 文件可能一直留着。迁移指南给出的命令uv venv --python 3.13 .venv-qiskit-2 source .venv-qiskit-2/bin/activate uv pip install \ qiskit2.5.0 \ qiskit-ibm-runtime0.48.0 \ qiskit-aer0.17.2注意事项qiskit-terra已被qiskit发行版取代不要安装自 Qiskit 1.0 起qiskit发行版拥有完整的qiskit包命名空间。qiskit-aer仅在需要高性能/噪声模拟时安装qiskit-ibm-runtime仅在需要 IBM QPU 时安装。如需绘图支持可改用qiskit[visualization]2.5.0。Windows PowerShell 下激活命令为.venv\Scripts\Activate.ps1setup.md。确认环境可用运行环境检查脚本安装后运行 skill 自带的环境检查脚本注意按 SKILL.md 的说明脚本要在 skill 目录下执行即skills/qiskit/python scripts/check_environment.py --require-runtime --require-aer该脚本不发网络请求、不读凭据见 check_environment.py它检查Python 是否 3.10、平台是否为 64-bit不满足会报错各发行版已安装版本是否与验证基线一致不一致默认是 warning--strict下为 error只要检测到qiskit-terra就直接报错提示改用干净的qiskit环境核心 API 冒烟检查QuantumCircuit、StatevectorSampler、StatevectorEstimator、generate_preset_pass_manager可正常导入。出现任何错误时脚本退出码非 0。加--json可获得机器可读报告。如果怀疑解释器混乱文档给出直接确认方法import sys import qiskit print(sys.executable) print(qiskit.__version__) print(qiskit.__file__)配置云访问之前先跑本地冒烟测试同样在 skill 目录下执行python scripts/run_local_primitives.py --shots 256 --seed 7核心 API 迁移对照migration.md 给出的旧写法与新写法对照表是本次迁移的主索引旧写法Qiskit 2.5 写法安装qiskit-terra安装qiskitfrom qiskit import Aerfrom qiskit_aer import AerSimulatorexecute(circuit, backend)V2 primitive或仅在必要时用 provider 专属 backendQuantumInstanceprimitive 实现 显式转译qiskit.opflowqiskit.quantum_info.SparsePauliOp加 primitive PUBscircuit.bind_parameters(...)circuit.assign_parameters(...)或把值放进 PUBV1Sampler/EstimatorStatevectorSampler/StatevectorEstimatorRuntime 的SamplerV2/EstimatorV2并行 V1 输入列表一个或多个 PUB 元组result.quasi_distsresult[i].data.register.get_counts()result.valuesresult[i].data.evsRuntime 共享Options()SamplerOptions、EstimatorOptions、dict 或.options.update()primitive 的backend/sessionprimitive 的modeRuntime 自动转译显式的 backend 专属 ISA 电路逻辑 observable 原样提交observable.apply_layout(isa_circuit.layout)backend.configuration()/.properties()BackendV2 直接属性与backend.targetchannelibm_quantumchannelibm_quantum_platformqiskit.pulseIBM fractional gates 或 Qiskit Dynamics按目的选QFT(...)blueprint 类QFTGate(...)或synth_qft_full(...)blueprint ansatz 类efficient_su2(...)等函数构造器instruction.c_if(...)if_test(...)等结构化控制流下面按模块给出迁移代码。V1 Sampler 迁到 V2旧形态不要再用# Legacy; do not use # sampler Sampler() # result sampler.run(circuits, parameter_values).result() # quasi_distribution result.quasi_dists[0]本地 V2 写法from qiskit.primitives import StatevectorSampler sampler StatevectorSampler(seed41) pub_result sampler.run( [(measured_circuit, parameter_values)], shots1024, ).result()[0] counts pub_result.data.meas.get_counts(0)文档说明的关键变化V2 输出是实测 shot 数据而非 V1 的准概率分布输出按经典寄存器组织参数扫描保留数组形状一个 PUB 包含一个电路及其参数值。结果按寄存器真实名字访问measure_all()创建的寄存器名为meas当结果需要按参数点分开时给get_counts()传索引不传索引可能在各轴上聚合计數见 primitives.md。V1 Estimator 迁到 V2旧形态# Legacy; do not use # estimator Estimator() # result estimator.run(circuits, observables, values).result() # expectation_value result.values[0]本地 V2 写法from qiskit.primitives import StatevectorEstimator estimator StatevectorEstimator() pub_result estimator.run( [(circuit, observable, parameter_values)] ).result()[0] expectation_values pub_result.data.evs standard_deviations pub_result.data.stdsRuntime 执行Options()和backend迁到mode旧 Runtime 写法里共享Options()与Estimator(session..., options...)# Legacy; do not use # options Options() # options.resilience_level 2 # estimator Estimator(sessionsession, optionsoptions)当前写法from qiskit_ibm_runtime import EstimatorV2 as Estimator estimator Estimator( modesession, options{resilience_level: 2}, )三种模式统一用mode语法sampler Sampler(modebackend) sampler Sampler(modebatch) sampler Sampler(modesession)文档特别提醒在 batch 或 session 内部不要把backendbackend传给 primitive那样会改变作业模式。迁到显式 ISA 电路旧 Runtime 示例常提交逻辑电路并依赖服务端转译V2 Runtime 要求 ISA 电路from qiskit.transpiler import generate_preset_pass_manager pass_manager generate_preset_pass_manager( backendbackend, optimization_level1, seed_transpiler41, ) isa_circuit pass_manager.run(logical_circuit)Estimator 的 observable 必须跟着 layout 走isa_observable logical_observable.apply_layout( isa_circuit.layout )文档指出不映射 observable 可能悄悄改变被测的物理量子比特或产生宽度错误。BackendV1 访问迁到 BackendV2旧写法backend.configuration().basis_gates、.coupling_map、backend.properties()全部替换为直接属性basis_operations backend.operation_names coupling_map backend.coupling_map target backend.target num_qubits backend.num_qubits门错误率、时长、量子比特支持情况通过Target条目查询。文档警告除非在刻意构造合成 target否则不要把 backend 与手动抄来的 basis/coupling 数据拼在一起。IBM 账户配置IBM Quantum Platform Classic 渠道已退役当前渠道名为ibm_quantum_platform。可信机器上的保存方式import os from qiskit_ibm_runtime import QiskitRuntimeService QiskitRuntimeService.save_account( channelibm_quantum_platform, tokenos.environ[IBM_QUANTUM_API_KEY], instanceos.environ.get(IBM_QUANTUM_INSTANCE), set_as_defaultTrue, overwriteTrue, )文档要求不要把 key 粘贴进源码或 notebook凭据保存在$HOME/.qiskit/qiskit-ibm.json不要手动编辑或提交到版本控制。CI 或临时机器上不持久化凭据、直接以token实例化 service 的方式以及 key 泄露后的处理见 setup.md。Pulse 代码qiskit.pulse在 Qiskit 2.0 被移除没有等价替换。文档给出按意图选择的三条路要在 IBM 硬件上执行支持的连续角度单/双量子比特旋转申请带 fractional gates 的 backend target要建模受驱动量子系统与脉冲级动力学用独立发布的 Qiskit Dynamics要保持历史 pulse 工作流不变只在遗留的 Qiskit 1.x 环境里隔离使用仅用于存档复现不要与 Qiskit 2.x 混用。两条硬性限制不要把pulse.build、ScheduleBlock或 pulse 绘图示例复制进 Qiskit 2.x 代码包含ScheduleBlock对象的 QPY 文件无法被 Qiskit 2.x 加载。电路库 blueprint 类多个可变 blueprint 类被弃用改为即时构建的函数或门from qiskit.circuit.library import ( QFTGate, efficient_su2, real_amplitudes, zz_feature_map, ) qft_gate QFTGate(4) ansatz efficient_su2(4, reps2) real_ansatz real_amplitudes(4, reps2) feature_map zz_feature_map(4, reps2)旧的QFT类自 2.1 起弃用、计划 3.0 移除。函数构造器在可变性与构建时机上可能与 blueprint 类不同迁移后要测参数顺序和电路元数据。经典条件迁到结构化控制流逐指令条件circuit.x(0).c_if(classical_register, 1)已移除改为with circuit.if_test((classical_bit, True)): circuit.x(0)然后验证所选 backend target 支持对应的控制流指令。生态包迁移qiskit-algorithms旧的quantum_instance构造器不再是当前用法直接传 primitivefrom qiskit.primitives import StatevectorSampler from qiskit_algorithms import PhaseEstimation phase_estimation PhaseEstimation( num_evaluation_qubits4, samplerStatevectorSampler(seed41), )当前VQE接受 V2 Estimator当前QAOA接受 V2 Sampler。优化器用对象而不是字符串from qiskit_algorithms.optimizers import COBYLA optimizer COBYLA(maxiter100)除非某个当前包 API 文档明确说明支持否则不要写optimizerCOBYLA这类字符串形式。qiskit-machine-learning自 0.8 起部分功能移出qiskit_algorithmsfrom qiskit_machine_learning.optimizers import COBYLA from qiskit_machine_learning.state_fidelities import ComputeUncompute from qiskit_machine_learning.utils import algorithm_globals文档提醒不要假设 0.7 教程里的 import 路径仍然有效具体以该包 0.8 迁移指南为准。qiskit-nature直接使用 mapper 类QubitConverter已作废当前应用代码主要在qiskit_nature.second_q下from qiskit_nature.second_q.mappers import JordanWignerMapper mapper JordanWignerMapper() qubit_operator mapper.map(fermionic_operator)序列化文档建议优先使用QPY 做 Qiskit 原生电路持久化、OpenQASM 做受支持的交换格式、显式的 JSON 兼容实验元数据。不要用 Python pickle 处理不可信工件。QPY 是前向兼容而非后向兼容新 Qiskit 通常能读旧 QPY反之不行——记录写出每个 QPY 文件所用的 Qiskit 版本。迁移验证怎样判断迁移完成migration.md 给出每次迁移后的 9 步验证清单在弃用警告可见的情况下运行 import对比一个小逻辑电路的理想状态或算符验证参数顺序和 PUB 输出形状验证 count 字符串与 Pauli 标签的顺序对一个 fakeBackendV2做编译确认所有 Estimator observable 都用了编译后的 layout对比应用层输出不要只比电路文本上 QPU 之前先跑一次有界噪声模拟记录新的包 pin 并更新实验清单。testing 文档提供了清单各条的可执行手段弃用警告即错误。迁移测试时用如下命令把 DeprecationWarning 提升为异常python -W error::DeprecationWarning your_test.py不要全局压制弃用警告Qiskit 2.x 的警告指向的正是 Qiskit 3.0 会坏的代码。电路语义等价小电路用Statevector/Operator的equiv()对比它考虑全局相位对比前先remove_final_measurements。带 reset、测量或经典控制的电路需要行为级测试而非幺正等价from qiskit.quantum_info import Operator, Statevector reference_state Statevector.from_instruction(reference_circuit) candidate_state Statevector.from_instruction(candidate_circuit) assert reference_state.equiv(candidate_state)位序与参数顺序显式测试 bitstring 解析10应解析为[0, 1]qubit 0 是最低有效位对每个非平凡 PUB 广播断言结果形状例如assert pub_result.data.evs.shape expected_shape不要靠肉眼读嵌套列表。转译测试对 fake backend 编译后检查不变量而不是快照电路文本isa_circuit pass_manager.run(circuit) assert isa_circuit.num_qubits backend.num_qubits assert isa_circuit.layout is not None target_operations set(backend.operation_names) circuit_operations set(isa_circuit.count_ops()) - {barrier} assert circuit_operations.issubset(target_operations)fake backend 可来自qiskit_ibm_runtime.fake_provider如FakeSherbrooke()注意 fake 名可能随 Runtime 版本变化要选当前 pin 里存在的名字。Observable layoutisa_observable observable.apply_layout(isa_circuit.layout) assert isa_observable.num_qubits isa_circuit.num_qubitsQPY 往返from io import BytesIO from qiskit import qpy buffer BytesIO() qpy.dump(circuit, buffer) buffer.seek(0) loaded qpy.load(buffer)[0] assert loaded circuittesting.md 的「Release Upgrade Test」把整个顺序固化了下来新建环境 → 跑环境检查器 → 本地 primitive 冒烟测试 → DeprecationWarning 当错误跑 → QPY 工件往返 → 对比电路语义 → 在 pin 住的 fake target 上对比编译结构预算 → 不提交作业地校验 Runtime 选项模型 → 跑一次有界噪声模拟 → 最后才安排最小硬件冒烟测试。其中一条硬规则不要把 QPU 作业当单元测试。迁移中常见的失败现象testing 文档的排查矩阵列出了与本次迁移直接相关的现象和对应处理import 报 invalid environment、terra 与 qiskit 并存不要修新建虚拟环境装qiskit。Sampler/EstimatorImportError显式导入当前实现——本地用qiskit.primitives的StatevectorSampler/StatevectorEstimatorIBM 用qiskit_ibm_runtime的SamplerV2/EstimatorV2。结果对象没有.quasi_dists/.values说明代码还在按 V1 输出取值改为result[0].data.meas.get_counts()与result[0].data.evs。没有.data.meas打印[register.name for register in circuit.cregs]和pub_result.data用实际的寄存器名访问。参数/广播报错打印参数名列表、parameter_values.shape和 observable 形状先缩到一个电路、一个 observable、一行参数再重建广播。Runtime 拒绝非 ISA 电路用精确 backend 对象生成 pass manager 编译后提交其输出。转译后 Estimator 数值错误检查是否漏了apply_layout。backend.configuration()失败改用 BackendV2 直接属性和backend.target。qiskit.pulseimport 失败2.0 已移除走 fractional gates 或 Qiskit Dynamics。session 被拒绝Open Plan 用户只能用 job 或 batch 模式。限制与收尾迁移收尾时文档给出几条不能省略的限制版本 pin验证时 GitHub 已发布2.5.1但 PyPI 当时仍只提供2.5.0因此文档使用 PyPI 可用的qiskit2.5.0pin更新 pin 前先核对 sources.md 中的 PyPI 与 GitHub releases 两个来源。应用包独立发版Algorithms、Nature、Machine Learning、Optimization 各自独立升级改核心 Qiskit pin 前检查它们的依赖当前基线分别为 0.4.0、0.8.0、0.9.0、0.7.0。升级策略pin 住所有 Qiskit 发行版把 Python、Qiskit、Runtime、Aer 与应用包版本连同结果一起记录更新前读 SDK 与 Runtime 的 release notes在新 lockfile 分支或新环境里升级不要在付费 QPU 实验进行中升级。旧 pulse 工作流只允许隔离在 1.x 环境里做存档复现包含ScheduleBlock的 QPY 无法被 2.x 读取。弃用警告是排期到 Qiskit 3.0 的迁移工作量不要全局静默。迁移完成的标志是check_environment.py无错误、本地冒烟测试通过、上面的验证清单语义等价、位序、参数形状、layout、QPY 往返、有界噪声模拟全部跑完并且新的包 pin 已记入实验清单。之后如果要上 QPU只安排最小的硬件冒烟作业并把 job ID、seed、backend 名和 primitive 选项一并记录。【免费下载链接】scientific-agent-skillsTurn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-use validated skills plus 100 scientific databases covering biology, chemistry, medicine, and drug discovery. Compatible with Cursor, Claude Code, Codex, Pi, Antigravity, and the open Agent Skills standard.项目地址: https://gitcode.com/GitHub_Trending/cl/scientific-agent-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考