Qiskit 2.0环境下BaseEstimator导入错误及版本兼容问题求助
问题背景
当前conda环境(/opt/anaconda3/envs/qnn)内Qiskit相关包版本:
conda list qiskit # packages in environment at /opt/anaconda3/envs/qnn: # # Name Version Build Channel qiskit 2.0.0 py312hcd83bfe_0 conda-forge qiskit-aer 0.17.0 pypi_0 pypi qiskit-ibm-runtime 0.37.0 pypi_0 pypi qiskit-machine-learning 0.8.2 pyhd8ed1ab_1 conda-forge
执行导入代码时:
import numpy as np import pandas as pd from qiskit import QuantumCircuit from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOp from qiskit.primitives import StatevectorEstimator as Estimator from qiskit_machine_learning.neural_networks import EstimatorQNN
出现以下错误:
ImportError: ----> 8 from qiskit_machine_learning.neural_networks import EstimatorQNN [...] File /opt/anaconda3/envs/qnn/lib/python3.12/site-packages/qiskit_machine_learning/neural_networks/effective_dimension.py:23 ... ---> 24 from qiskit.primitives import BaseEstimator, BaseEstimatorV1, Estimator, EstimatorResult 25 from qiskit.quantum_info import SparsePauliOp 26 from qiskit.quantum_info.operators.base_operator import BaseOperator ImportError: cannot import name 'BaseEstimator' from 'qiskit.primitives' (/opt/anaconda3/envs/qnn/lib/python3.12/site-packages/qiskit/primitives/__init__.py)
单独执行from qiskit.primitives import Estimator也报错:
ImportError: cannot import name 'Estimator' from 'qiskit.primitives' (/opt/anaconda3/envs/qnn/lib/python3.12/site-packages/qiskit/primitives/__init__.py)
尝试降级Qiskit到0.44.0未解决,通过conda升级qiskit-machine-learning到0.9.0时出现包未找到错误:
conda install -c conda-forge qiskit-machine-learning=0.9.0 Channels: - conda-forge - defaults Platform: osx-arm64 Collecting package metadata (repodata.json): done Solving environment: failed PackagesNotFoundError: The following packages are not available from current channels: - qiskit-machine-learning=0.9.0*
解决方案
1. 核心原因说明
Qiskit 2.0.0是重大版本更新,重构了primitives模块:原Estimator被拆分为StatevectorEstimator、SamplerEstimator等具体实现,且移除了BaseEstimator这类V1版本的抽象类。而qiskit-machine-learning 0.8.2依赖的是Qiskit 0.4x系列的旧primitives结构,因此出现兼容问题。
qiskit-machine-learning 0.9.0才适配Qiskit 2.0.0,但conda-forge的osx-arm64通道暂未提供该版本,需改用pip安装。
2. 具体操作步骤
步骤1:卸载现有冲突包
先移除当前的Qiskit核心包和机器学习包,避免版本残留:conda remove qiskit qiskit-machine-learning -y pip uninstall qiskit-aer qiskit-ibm-runtime -y步骤2:安装适配的版本组合
有两种稳定组合可选:组合一:Qiskit 2.0.0 + qiskit-machine-learning 0.9.0(推荐)
用conda安装核心Qiskit,pip安装适配的机器学习扩展包:conda install -c conda-forge qiskit=2.0.0 -y pip install qiskit-machine-learning==0.9.0 qiskit-aer==0.18.0 qiskit-ibm-runtime==0.38.0注:qiskit-aer 0.18.0和qiskit-ibm-runtime 0.38.0是适配Qiskit 2.0.0的对应版本。
组合二:Qiskit 0.44.1 + qiskit-machine-learning 0.8.2(兼容旧代码)
如果不想升级到Qiskit 2.0,需确保所有依赖包版本同步匹配:conda install -c conda-forge qiskit=0.44.1 qiskit-machine-learning=0.8.2 -y pip install qiskit-aer==0.17.1 qiskit-ibm-runtime==0.37.1注:之前降级到0.44.0未解决问题,大概率是因为qiskit-aer、qiskit-ibm-runtime等依赖包版本未同步降级导致的。
步骤3:验证导入
重新运行导入代码,确认无错误:import numpy as np import pandas as pd from qiskit import QuantumCircuit from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOp # 对于Qiskit 2.0,Estimator需从具体实现导入,或用别名 from qiskit.primitives import StatevectorEstimator as Estimator from qiskit_machine_learning.neural_networks import EstimatorQNN
3. 后续注意事项
- 尽量避免混用conda和pip安装Qiskit相关包,优先保持同一安装源;若必须混用,建议用conda安装核心Qiskit包,pip安装扩展包。
- 安装前确认qiskit-machine-learning的版本兼容要求,确保与Qiskit核心版本匹配。
内容的提问来源于stack exchange,提问作者diogomaia00

