Qiskit C APIのインストール
このガイドでは、Qiskit C APIのインストール方法と使用方法について説明します。インストールが完了したら、Qiskit C APIでPythonを拡張するを参照してください。
以下の例では、CでObservableを構築します:
// file: example.c
#include <stdio.h>
#include <stdint.h>
#include <qiskit.h>
int main(int argc, char *argv[]) {
// build a 100-qubit empty observable
uint32_t num_qubits = 100;
QkObs *obs = qk_obs_zero(num_qubits);
// add the term 2 * (X0 Y1 Z2) to the observable
QkComplex64 coeff = {2, 0};
QkBitTerm bit_terms[3] = {QkBitTerm_X, QkBitTerm_Y, QkBitTerm_Z};
// bit terms: X Y Z
uint32_t indices[3] = {0, 1, 2}; // indices: 0 1 2
QkObsTerm term = {coeff, 3, bit_terms, indices, num_qubits};
qk_obs_add_term(obs, &term); // append the term
// print some properties and the observable itself
printf("num_qubits: %i\n", qk_obs_num_qubits(obs));
printf("num_terms: %lu\n", qk_obs_num_terms(obs));
printf("observable: %s\n", qk_obs_str(obs));
// free the memory allocated for the observable
qk_obs_free(obs);
return 0;
}
UNIX系
このセクションでは、UNIX系システム向けのビルド手順を説明します。
必要条件
コンパイルには以下のツールが必要です:
- Rust コンパイラ:例としてQiskit をソースからインストールするガイドを参照してください
- C コンパイラ:例えば、Linux では GCC、MacOS では Clang を使用します。Qiskit の C API はC11標準に準拠したコンパイラと互換性があります。
cbindgen:C ヘッダーを作成するためのツールで、cargo install cbindgenでインストールできます コマンドラインからツールを実行できるようにする必要があります。/path/to/.cargo/binを含むようにPATH変数をエクスポートする必要がある場合があります。- Python ライブラリのインストール(Python 3.9以上):動的リンク時に Python ライブラリが必要です。Python は実行時には使用されず、インタープリタは初期化されないことに注意してください。
libpythonからいくつかのシンボルが定義されている必要があるだけです。詳細についてはこちらの issueを参照してください。 - (GNU)Make:省略可能ですが、自動インストールプロセスに使用することを推奨します。
以下のコードですべてのインストールを確認できます:
rustc --version
gcc --version
cbindgen --version
make --version # optional, but recommended
ビルド
CヘッダーとライブラリをビルドするにはQiskitのルートディレクトリで以下のMakeコマンド1を実行します:
make c
これにより、コンパイル済みの共有ライブラリがdist/c/libに、すべての関数宣言を含むqiskit.hヘッダーがdist/c/includeに生成されます。正確なライブラリ名はプラットフォームによって異なります。例えば、UNIXではlibqiskit.so、MacOSではlibqiskit.dylibとなります。
(このステップでは現在多くの警告が出力されますが、これは想定内の動作であり、問題ではありません。将来のバージョンでは警告が削除される予定です。)
次に、Qiskit Cヘッダーとライブラリを使ってCプログラムをコンパイルできます:
gcc example.c -o example.o -I /path/to/dist/c/include -L /path/to/dist/c/lib -lqiskit
リンク時にQiskitライブラリが見つかるように、ランタイムライブラリパスに/path/to/dist/c/libを含めるよう設定してください。動的リンク時にPythonライブラリがデフォルトで利用できない場合は、これも追加する必要があります。これらのコマンドはプラットフォームによって異なります。Linuxの場合:
export LD_LIBRARY_PATH=/path/to/dist/c/lib:$LD_LIBRARY_PATH
# On Linux, the Python library is typically included
# in the dynamic library path by default.
export LD_LIBRARY_PATH=/path/to/python/lib:$LD_LIBRARY_PATH
MacOSの場合:
export DYLD_LIBRARY_PATH=/path/to/dist/c/lib:$DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/path/to/python/lib:$DYLD_LIBRARY_PATH
また、コンパイル時にコンパイラフラグに以下を追加することで、ランタイムライブラリパスを設定することもできます:
-Wl,-rpath,/path/to/dist/c/lib
# same for Python
コンパイラフラグに追加します。 さらに、動的リンク時にPythonライブラリが利用可能である必要があります。Linux環境では通常はこれがデフォルトです。
バイナリを実行するには:
./example.o
上記のサンプルコードを使用している場合、以下のように出力されます:
num_qubits: 100
num_terms: 1
observable: SparseObservable { num_qubits: 100,
coeffs: [Complex { re: 2.0, im: 0.0 }],
bit_terms: [X, Y, Z],
indices: [0, 1, 2],
boundaries: [0, 3] }
Windows
このセクションでは、Windowsシステム向けのビルド手順を説明します。
Windows で C API を使用するには、2つの独立した方法があります:
-
Qiskit C API を使用する Python 拡張モジュールをビルドする。ステップ1〜5に従ってください。この方法では、
qiskitPython パッケージに同梱されている C ヘッダーを使用するため、Rust や cbindgen は必要ありません。 -
UNIX 系 セクションで行っているように、純粋な C プログラムからリンクするための スタンドアロン C ライブラリをビルドする。ステップ1を完了し、追加要件が記載されている スタンドアロン・ライブラリのビルド に進んでください。
必要条件
-
一部の手順では管理者権限が必要です。
-
5〜8 GB の空きディスク容量。
-
C コンパイラ: Microsoft Visual C++ (MSVC)。ステップ1でインストールします。
-
64ビットの Python(3.10以降)。ステップ1でインストールします。
開始する前に
ワークスペースを作成します。これは、ローカル・ドライブ上の短いパスにする必要があります。OneDrive と同期されたフォルダー(Documents や Desktop など)、ネットワーク・ドライブ、またはスペースや非 ASCII 文字を含むパスは使用しないでください。ユーザー名に英語以外の文字が含まれている場合は、ユーザー・フォルダーの下には配置しないでください。
適切なワークスペース・パスの例: C:\workspace、D:\workspace、C:\Users\john\workspace
ステップ1. 前提条件をインストールする
MSVC Build Tools(Cコンパイラ)— 最初にインストールしてください
これは大容量のダウンロードです(2〜5 GB、10〜30分)。お使いのコンピューターが互換性を持っているかどうかをすぐに確認できるよう、最初にインストールしてください。
Requires administrator rights.
オプション A — winget
PowerShell ターミナルを開いて、以下を実行します:
winget install Microsoft.VisualStudio.2022.BuildTools --override "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --passive --wait"
インストーラーの実行中、ターミナルが固まったように見えます。これは正常な動作で、10〜30分かかります。タスクバーで「Visual Studio Installer」のウィンドウを確認してください。
winget が認識されない場合は、Microsoft Store から App Installer を更新するか、オプション B を使用してください。
オプション B — 手動ダウンロード Visual Studio Build Tools for C++ の Web サイトを開き、Download Build Tools をクリックします。実行可能ファイルを実行してインストールを開始します。
Installing Visual Studio ウィンドウが開いたら、Workloads タブで「Desktop development with C++」を選択します。詳細については、Visual Studio で C および C++ サポートをインストールする ページを参照してください。
VS Code
Visual Studio Code のサイトから VS Code をダウンロードするか、winget install Microsoft.VisualStudio.Code を実行します。ダウンロードした実行可能ファイルを実行して VS Code をインストールします。
インストールが完了したら、次の手順に進みます:
- VS Code を開きます
- File → Open Folder をクリックし、ワークスペースを選択します(例:
C:\workspace)。 - Terminal → New terminal をクリックして PowerShell ターミナルを開きます。
- 左側の Extensions アイコンをクリックするか、Ctrl+Shift+X を押します。Extensions ウィンドウで
ms-python.python、ms-toolsai.jupyter、ms-vscode.cpptoolsを検索してインストールします。
特に指示がない限り、このガイドの残りのコマンドはすべて VS Code ターミナルで実行してください。VS Code ターミナルはデフォルトで PowerShell を使用するため、Windows 標準のコマンド・ウィンドウとの混同を防げます。
ワークスペース変数を設定します。例えば、ワークスペースの名前が workspace の場合、次を実行します。
$WORKSPACE = "C:\workspace" # change to your workspace path
mkdir $WORKSPACE -Force
cd $WORKSPACE
Python 3.12 (推奨バージョン)
Python 3.12 は、qiskit-aer などの依存関係に対して最も充実したホイールが提供されているため推奨されます。3.10 および 3.11 も動作しますが、3.13 以降では一部のパッケージで事前ビルド済みホイールが提供されていない場合があります。
VS Code ターミナルを開き、次のコードを実行して適切な Python のバージョンを検出します。
# ── Pre-checks ───────────────────────────────────────────────────────────────
if ($env:CONDA_DEFAULT_ENV -or $env:CONDA_PREFIX) {
Write-Warning "Conda is active. Run 'conda deactivate' first, or open a new terminal."
return
}
if ($env:VIRTUAL_ENV) {
Write-Warning "A virtual environment is active: $env:VIRTUAL_ENV — run 'deactivate' first."
return
}
# ── Detect Python ────────────────────────────────────────────────────────────
$PYTHON_EXE = $null
try {
$ver = (py -3 --version 2>&1) -replace "Python ", ""
$bits = py -3 -c "import platform; print(platform.architecture()[0])"
$path = py -3 -c "import sys; print(sys.executable)"
if ($path -match "(?i)(anaconda|miniconda|miniforge|mambaforge|[/\\]conda[/\\]|[/\\]envs[/\\])") {
Write-Host "Skipping conda-managed Python at: $path"
} elseif ([version]$ver -ge [version]"3.10" -and $bits -eq "64bit") {
$PYTHON_EXE = $path
Write-Host "Python $ver (64-bit) found: $PYTHON_EXE"
} else {
Write-Host "Skipping ($ver, $bits) — need 3.10+ 64-bit"
}
} catch {}
if (-not $PYTHON_EXE) {
try {
$ver = (python --version 2>&1) -replace "Python ", ""
$bits = python -c "import platform; print(platform.architecture()[0])"
$path = python -c "import sys; print(sys.executable)"
if ($path -match "(?i)(anaconda|miniconda|miniforge|mambaforge|[/\\]conda[/\\]|[/\\]envs[/\\])") {
Write-Host "Skipping conda-managed Python at: $path"
} elseif ([version]$ver -ge [version]"3.10" -and $bits -eq "64bit") {
$PYTHON_EXE = $path
Write-Host "Python $ver (64-bit) found: $PYTHON_EXE"
} else {
Write-Host "Skipping ($ver, $bits) — need 3.10+ 64-bit"
}
} catch {}
}
# Install Python 3.12 if it wasn't found.
if (-not $PYTHON_EXE) {
Write-Host "Not found. Installing Python 3.12..."
winget install Python.Python.3.12
Write-Host "Close and reopen the terminal, then rerun this snippet."
}
if ($PYTHON_EXE -and ($PYTHON_EXE -match '[^\x20-\x7E]')) {
Write-Warning "Python path has non-ASCII characters. Keep your workspace on an ASCII path."
}
if ($PYTHON_EXE) { Write-Host "`$PYTHON_EXE = '$PYTHON_EXE'" }
ダウンロードがうまくいかなかった場合、または手動でダウンロードしたい場合は、Python 3.12 をインストールするコード行をコメントアウトし、Python の Web サイトから Python 3.12 をダウンロードしてください。実行可能ファイルを実行して Python をインストールします。インストール中に「Add Python to PATH」を選択し、上記のスニペットを再実行して正しく検出されることを確認してください。
-
Microsoft Store の Python には C ヘッダーが含まれていないため、使用しないでください。
pythonを実行すると Microsoft Store が開く場合は、Windows の設定 → アプリ → 詳細なアプリ設定 → アプリ実行エイリアスからエイリアスを無効にしてください。 -
Anaconda を使用している場合: (base) というプレフィックスが表示されなくなるまで
conda deactivateを実行してください。それでも消えない場合は、VS Code で新しいターミナルを開いてください。
Git (オプション)
ラボのリポジトリをクローンする場合にのみ必要です。winget install Git.Git を実行してください。
ステップ2 - Qiskit を使用した Python 仮想環境のセットアップ
VS Code ターミナルをリセットする
VS Code ターミナルを開いてリセットします。
$WORKSPACE = "C:\workspace" # change to your workspace path
if (-not $PYTHON_EXE) {
if (Get-Command py -ErrorAction SilentlyContinue) { $PYTHON_EXE = py -3 -c "import sys; print(sys.executable)" }
elseif (Get-Command python -ErrorAction SilentlyContinue) { $PYTHON_EXE = python -c "import sys; print(sys.executable)" }
else { Write-Host "Python not found — complete Step 1.3 first." ; return }
Write-Host "`$PYTHON_EXE = '$PYTHON_EXE'"
}
仮想環境の作成とアクティブ化
スクリプトの実行を許可し(ユーザーごとに1回)、仮想環境を作成します。
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
cd $WORKSPACE
& $PYTHON_EXE -m venv .venv --prompt workspace
.\.venv\Scripts\Activate.ps1
アクティブ化時に「scripts disabled」に関する赤いエラーが表示される場合、Set-ExecutionPolicy の行が実行されていません。手動で実行してから再試行してください。
これでプロンプトに (workspace) が表示されるはずです。
Verify:
Get-Command python | Select-Object -First 1 -ExpandProperty Source
# → workspace\.venv\Scripts\python.exe
パッケージのインストール
python -m pip install --upgrade pip setuptools wheel
pip install "qiskit[visualization]>=2.4.2"
pip install --prefer-binary qiskit-ibm-runtime qiskit-aer
pip install notebook ipykernel ipywidgets # optional: run the following Python steps in Jupyter
--prefer-binary を使用すると、qiskit-aer をソースからコンパイルするのを避けられます。それでも qiskit-aer が失敗する場合は、pip install qiskit-aer --only-binary=:all: を試すか、インストールをスキップしてください。qiskit-aer はオプションであり、ローカル・シミュレーションにのみ必要です。
セットアップ後にpip install --upgrade qiskitを実行しないでください。新しいマイナーバージョンにアップグレードすると、古いバージョン用にビルドされたC拡張が壊れます。
ステップ3 - MSVC 環境の読み込み
新しい Python セッションを開始するたびに(例えば、Jupyter カーネルを再起動するたびに)、次のコードを実行してください。これにより、MSVC の開発者環境が自動的に検出・読み込まれるため、x64 の組み込みコマンド・プロンプトを使用する必要がなくなります。
このドキュメントの例では、MSVC を使用して setuptools により C 拡張モジュールをビルドします。一般に、QISKIT_PYTHON_EXTENSION を定義し、qiskit.h をインクルードし、init 関数内で qk_import() を呼び出します。ビルド時に必要なのは qiskit.capi.get_include() からのヘッダーのみで、ライブラリはリンクされません。詳細は C を使用して Python で Qiskit を拡張する を参照してください。
MSVC 環境の読み込み
import os, sys, subprocess, glob, shutil
def load_msvc_env():
if os.name != "nt":
return "Not Windows — the system C compiler is used as-is."
if shutil.which("cl"):
return "cl.exe is already available in this kernel."
pf86 = os.environ.get("ProgramFiles(x86)", r"C:\Program Files (x86)")
pf = os.environ.get("ProgramFiles", r"C:\Program Files")
vcvars = None
vswhere = os.path.join(pf86, "Microsoft Visual Studio", "Installer", "vswhere.exe")
if os.path.isfile(vswhere):
# vswhere outputs UTF-8 regardless of system locale
inst = subprocess.run(
[vswhere, "-latest", "-products", "*",
"-requires", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
"-property", "installationPath"],
capture_output=True, text=True, encoding="utf-8").stdout.strip()
if inst:
cand = os.path.join(inst, "VC", "Auxiliary", "Build", "vcvars64.bat")
if os.path.isfile(cand):
vcvars = cand
if not vcvars:
pat = os.path.join("Microsoft Visual Studio", "*", "*",
"VC", "Auxiliary", "Build", "vcvars64.bat")
hits = glob.glob(os.path.join(pf86, pat)) + glob.glob(os.path.join(pf, pat))
if hits:
vcvars = sorted(hits)[-1]
if not vcvars:
return ("Could not find vcvars64.bat. Install MSVC Build Tools (Step 1.3), "
"or launch Jupyter from the x64 Native Tools Command Prompt.")
# cmd.exe outputs in the OEM codepage (cp437/cp850/etc.), not the ANSI codepage
out = subprocess.run(f'"{vcvars}" >nul 2>&1 && set',
capture_output=True, text=True, encoding="oem", shell=True).stdout
for line in out.splitlines():
if "=" in line:
k, _, v = line.partition("=")
os.environ[k] = v
return ("Loaded MSVC from:\n " + vcvars) if shutil.which("cl") \
else "Ran vcvars64.bat but cl.exe is still not found — check your MSVC install."
print(load_msvc_env())
print("cl.exe on PATH:", shutil.which("cl") is not None)
セットアップの検証
セットアップが正しく機能していることを確認します。
import importlib.util, shutil
checks = {
"setuptools": importlib.util.find_spec("setuptools") is not None,
"wheel": importlib.util.find_spec("wheel") is not None,
"cl.exe": shutil.which("cl") is not None,
}
for name, ok in checks.items():
print(f" [{'PASS' if ok else 'FAIL':>4}] {name}")
if not checks["cl.exe"]:
print("\n cl.exe is not on PATH. rerun the cell above to load the MSVC environment.")
elif all(checks.values()):
print("\n Toolchain ready. Continue to the smoke test.")
ステップ4 - スモークテスト: C 拡張モジュールのビルド
次のコードを実行します。このコードは _smoke_pkg/ にソースファイルを書き込み、Qiskit C API に対して C 拡張機能をビルドし、その結果をインポートします。「SMOKE TEST PASSED」と表示されれば、ツールチェーンの準備が整っています。
このパッケージは C を使用して Python で Qiskit を拡張する のプロセスに従っており、Qiskit C API リファレンス の関数を使用します。
スモークテストのコード
import sys, subprocess, pathlib, importlib
root = pathlib.Path("_smoke_pkg")
pkg = root / "src" / "qgss_smoke"
pkg.mkdir(parents=True, exist_ok=True)
(root / "pyworkspace.toml").write_text("""
[build-system]
requires = ["setuptools", "qiskit>=2.4.2"]
build-backend = "setuptools.build_meta"
[workspace]
name = "qgss_smoke"
version = "0.0.1"
dependencies = ["qiskit>=2.4.2"]
[tool.setuptools]
package-dir = {"" = "src"}
""".lstrip())
(root / "setup.py").write_text("""
import qiskit
from setuptools import setup, Extension
core_ext = Extension(
name="qgss_smoke._core",
sources=["src/qgss_smoke/_coremodule.c"],
include_dirs=[qiskit.capi.get_include()],
)
setup(ext_modules=[core_ext])
""".lstrip())
(pkg / "__init__.py").write_text("from . import _core\nbuild_demo = _core.build_demo\n")
(pkg / "_coremodule.c").write_text("""
#define QISKIT_PYTHON_EXTENSION
#include <Python.h>
#include <qiskit.h>
#include <stdint.h>
static PyObject *build_demo(PyObject *self, PyObject *args) {
QkCircuit *qc = qk_circuit_new(2, 0);
uint32_t q0[1] = {0};
qk_circuit_gate(qc, QkGate_H, q0, NULL);
uint32_t q1[1] = {1};
qk_circuit_gate(qc, QkGate_X, q1, NULL);
return qk_circuit_to_python_full(qc);
}
static PyMethodDef core_methods[] = {
{"build_demo", build_demo, METH_NOARGS, "Build a 2-qubit demo circuit in C."},
{NULL, NULL, 0, NULL},
};
static struct PyModuleDef core_module = {
.m_base = PyModuleDef_HEAD_INIT,
.m_name = "_core",
.m_methods = core_methods,
};
PyMODINIT_FUNC PyInit__core(void) {
if (qk_import() < 0) {
return NULL;
}
return PyModuleDef_Init(&core_module);
}
""".lstrip())
# On Windows, an imported .pyd is file-locked by the OS. Drop the module from
# sys.modules BEFORE pip install --force-reinstall, otherwise pip fails with
# WinError 32 ("file in use") trying to overwrite the locked .pyd.
if "qgss_smoke._core" in sys.modules:
del sys.modules["qgss_smoke._core"]
if "qgss_smoke" in sys.modules:
del sys.modules["qgss_smoke"]
r = subprocess.run(
[sys.executable, "-m", "pip", "install", "--no-build-isolation",
"--force-reinstall", "--quiet", str(root.resolve())],
capture_output=True, text=True,
)
if r.returncode != 0:
output = (r.stderr + r.stdout).strip()
print("BUILD FAILED:\n")
print(output)
if "WinError 32" in output or "being used by another process" in output:
print("\n--- TIP ---")
print("The .pyd file is locked because it was previously imported in this kernel.")
print("Restart the kernel (Ctrl+Shift+P → 'Jupyter: Restart Kernel'), then rerun")
print("the Step 3 MSVC cell first, then this cell again.")
elif "cl.exe" in output.lower() or "vcvars" in output.lower() or "cannot find" in output.lower():
print("\n--- TIP ---")
print("The compiler was not found. rerun the Step 3 cell to load the MSVC environment.")
else:
importlib.invalidate_caches()
import qgss_smoke
from qiskit import QuantumCircuit
qc = qgss_smoke.build_demo()
ops = dict(qc.count_ops())
ok = isinstance(qc, QuantumCircuit) and ops.get("h") == 1 and ops.get("x") == 1
print("Returned object is a QuantumCircuit:", isinstance(qc, QuantumCircuit))
print("Gates built in C:", ops)
print("\nSMOKE TEST PASSED — your Windows toolchain can build Qiskit C extensions."
if ok else "\nSomething is off — check the gates above.")
ステップ5 — VS Code の構成(オプション)
使いやすさのために、このプロセスに従って C ファイル用の IntelliSense を設定し、Python インタープリターを自動選択できるようにします。
.vscode ディレクトリの作成
VS Code ターミナルで、次のコードを実行します。
mkdir $WORKSPACE\.vscode -Force
設定ファイルの作成
次のコードを実行して、ワークスペースに .vscode/settings.json を作成します。
{
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/Scripts/python.exe",
"python.terminal.activateEnvironment": true,
"jupyter.notebookFileRoot": "${workspaceFolder}"
}
プロパティ・ファイルの作成
次のコードは、.vscode/c_cpp_properties.json に貼り付ける必要がある JSON を出力します。
import qiskit.capi
inc = qiskit.capi.get_include().replace("\\", "/")
print(".vscode/c_cpp_properties.json — create this file with the content below:\n")
print('{')
print(' "version": 4,')
print(' "configurations": [')
print(' {')
print(' "name": "Win32",')
print(f' "includePath": ["{inc}"],')
print(' "defines": ["QISKIT_PYTHON_EXTENSION"],')
print(' "compilerPath": "cl.exe",')
print(' "cStandard": "c11",')
print(' "intelliSenseMode": "windows-msvc-x64"')
print(' }')
print(' ]')
print('}')
VS Code 拡張機能ファイルの作成
VS Code で、次の内容の .vscode/extensions.json を作成します。
{
"recommendations": ["ms-python.python", "ms-toolsai.jupyter", "ms-vscode.cpptools"]
}
スタンドアロン・ライブラリのビルド
このセクションでは、UNIX 系 セクションで説明されているように、純粋な C プログラムをコンパイルおよびリンクする場合にのみ必要となる、スタンドアロンの C ライブラリをビルドします。ステップ1 の前提条件に加えて、次のツールが必要です。
-
Rust コンパイラー: 例えば ソースから Qiskit をインストールするガイド を参照してください
-
cbindgen: C ヘッダーを作成するためのツールで、cargo install cbindgenでインストールできます。 コマンドラインからツールを実行できるようにする必要があり、そのためにはPATH変数に cargo のパスを追加する必要がある場合があります。 -
python3.libとpython3.dllの両方にアクセスできる Python インストール -
Qiskit リポジトリ のクローン(
git clone https://github.com/Qiskit/qiskit.git)
スタンドアロン・ライブラリのビルド
まず、Qiskit のルートで VS Code (PowerShell) ターミナルにて次を実行し、qiskit_cext の動的ライブラリをコンパイルします。
$env:PATH = "\path\to\pythonlib;" + $env:PATH
cargo rustc --release --crate-type cdylib -p qiskit-cext
これにより、.dll 動的ライブラリと関連する .dll.lib ファイルが target/release に生成されます。
次に、以下でヘッダーを生成します
cbindgen --crate qiskit-cext --output dist\c\include\qiskit.h
これにより、MSVC 互換のヘッダーがdist\c\includeに書き込まれます。
次にclを使用して C プログラムをコンパイルできます。コンパイラが qiskit ライブラリを見つけられるように、PATH 変数にtarget\releaseを含めます。
$env:PATH = "\path\to\target\release;" + $env:PATH
cl example.c qiskit_cext.dll.lib -I\path\to\dist\c\include
実行前に、python3.dll へのパスを含めてください。
$env:PATH = "\path\to\python3-dll;" + $env:PATH
.\example.exe
実行すると以下のように出力されます:
num_qubits: 100
num_terms: 1
observable: SparseObservable { num_qubits: 100,
coeffs: [Complex { re: 2.0, im: 0.0 }],
bit_terms: [X, Y, Z],
indices: [0, 1, 2],
boundaries: [0, 3] }
トラブルシューティング
winget が認識されない
Microsoft Store から App Installer を更新するか、該当する手動ダウンロード・リンクを使用してください
cl が認識されない
MSVC 読み込みセル(ステップ3)を再実行するか、x64 Native Tools コマンド・プロンプトを使用してください
python を実行すると Microsoft Store が開く
設定 → アプリ → 詳細なアプリ設定 → アプリ実行エイリアスに移動し、python.exe をオフにしてください
.ps1 cannot be loaded / スクリプトが無効になっている
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned を実行してから再試行してください
cannot open file 'qiskit.h'
python -c "import qiskit.capi; print(qiskit.capi.get_include())" を実行し、パスが存在することを確認してください
qiskit.capi が見つからない
pip install "qiskit[visualization]~=2.4.2" を実行してください
qiskit-aer のビルドが失敗する
pip install qiskit-aer --only-binary=:all: を実行してください。それでも失敗する場合は、Python 3.12 を使用するか、オプションである aer をスキップしてください
ビルドは成功するがインポート時にバージョン・エラーが発生する
ビルドされた Qiskit C 拡張機能とインストールされている Qiskit のバージョンは一致している必要があります。pip install "qiskit~=2.4.2" で Qiskit を再インストールしてください
C を再ビルドしたが回路が変わらない
C 拡張機能はライブで再インポートできません。カーネルを再起動し、MSVC のコマンド(ステップ3)を再実行してから、再ビルドしてください
PowerShell スクリプトがブロックされた
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
パス長エラー
C:\ 上に短いルート・パスを使用する(例えば C:\workspace、またはセットアップ時に設定したパス)か、長いパスを有効にしてください: 設定 → システム → 開発者向け → 長いパス
Conda がアクティブである(プロンプトに (base) が表示される)、または Anaconda 使用後にビルドの動作がおかしい
CONDA_DEFAULT_ENV と CONDA_PREFIX の両方が環境からなくなるまで conda deactivate を実行してください。$env:CONDA_PREFIX で確認します。それでも残っている場合は、(Anaconda プロンプトではなく)新しい PowerShell を開き、ステップ2 からやり直してください。
仮想環境が conda 管理の Python から作成された(.venv\pyvenv.cfg の home = 行を確認)
仮想環境が conda の C ランタイムを継承しており、その場では修正できません。削除して、Python の Web サイトから Python 3.12 をダウンロードし、再構築してください。Remove-Item -Recurse -Force .venv を実行し、ステップ1 の Python 検出スニペットを再実行して $PYTHON_EXE を設定してから、仮想環境を再作成してください(ステップ2)。
インポート時に DLL load failed が発生する
Conda が仮想環境に漏れ込んでいる可能性があります。この直前の2つの問題を両方確認してください。また、Python が64ビットであることを確認してください: python -c "import platform; print(platform.architecture())"
パスが文字化けする、または C1083 でビルドが失敗する
ユーザー名またはワークスペースのパスに ASCII 以外の文字が含まれています。ワークスペースを短い ASCII のみのパス(例えば C:\workspace)に移動してください
ビルドまたはインポートがランダムに失敗し、再試行すると成功する
ワークスペース・フォルダーが OneDrive によって同期されています。C:\workspace のようなローカル・パスに移動してください
ビルドが途中で中断された(例えば、停電が発生した場合)
ワークスペース内の _smoke_pkg フォルダーを削除し、MSVC 読み込みセルを再実行してから、スモークテストのセルを再実行してください
pip install が SSL 証明書エラーで失敗する
お使いのネットワークが HTTPS を傍受するプロキシを使用しています。pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org qiskit の実行を試すか、ネットワーク管理者にプロキシの CA 証明書を尋ねてください
Windows Defender が .pyd ファイルを隔離する
Windows セキュリティ → ウイルスと脅威の防止 → 設定の管理 → 除外に移動し、ワークスペースの .venv と _smoke_pkg フォルダーを Defender の除外に追加してください
VS Build Tools をインストールできない(管理者権限がない)
管理者アクセスが必要です。IT 部門にアクセス権を依頼してください
再ビルド中に WinError 32 / ファイルが使用中
.pyd が実行中のカーネルによってロックされています。カーネルを再起動し(Ctrl+Shift+P → Jupyter: Restart Kernel)、ステップ3 を再実行してから、再ビルドしてください
コマンドを実行しても何も起きない(エラーも出力もない)
PowerShell ではなく cmd.exe を使用している可能性があります。プロンプトを確認してください: PowerShell では PS C:\>、cmd では C:\> と表示されます。スタート・メニューまたは Win+X から PowerShell を開いてください
MSVC のインストールが止まっているように見える
--passive --wait フラグは、インストーラーがバックグラウンドで実行されている間、PowerShell をブロックします。タスクバーに「Visual Studio Installer」ウィンドウがないか確認してください。インストールには10〜30分かかることがあります
次のステップ
- Qiskit C API を使用して Python を拡張する 方法を学びます。
- Qiskit をインストールする。
- Qiskit C API リファレンス を確認します。