키스킷 C API 설치
이 가이드에서는 Qiskit C API를 설치하고 사용하는 방법을 설명합니다. 설치가 완료되면 “Qiskit C API를 사용하여 Python 확장하기 ” 문서를 읽어보세요.
다음 예는 C로 관찰 가능 항목을 빌드하는 예제입니다:
// 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와 유사한 시스템에 대한 빌드 지침을 제공합니다.
요구사항
컴파일에는 다음 도구가 필요합니다:
- Rust 컴파일러: 예를 들어 소스에서 키스킷 설치에 대한 가이드를 참조하세요
- C 컴파일러(예: Linux 의 GCC 및 MacOS 의 Clang). 키스킷의 C API는 표준을 준수하는 컴파일러와 호환됩니다 C11 표준을 준수하는 컴파일러와 호환됩니다.
/path/to/.cargo/bincbindgen: C 헤더 파일을 생성하는 도구로, 다음 명령을 통해 설치할 수cargo install cbindgen있습니다. 명령줄에서 이 도구를 실행할 수 있도록 설정해야 하며, 이를 위해서는 변수를PATHexport하여 include 경로를 지정해야 할 수도 있습니다.- Python 라이브러리 설치됨 ( Python 3.9 +): 동적 링크 시 Python 라이브러리가 필요합니다. Python 는 런타임에 사용되지 않으며 인터프리터는 절대 초기화되지 않는다는 점에 유의하십시오. 단지 에서
libpython일부 심볼만 정의하면 됩니다. 자세한 내용은 이번 호를 참조하십시오. - (GNU) Make: 선택 사항이지만 자동 설치 프로세스를 사용하는 것이 좋습니다.
이 코드는 모든 것이 설치되었는지 확인합니다:
rustc --version
gcc --version
cbindgen --version
make --version # optional, but recommended빌드
C 헤더와 라이브러리를 빌드하려면 키스킷 루트에서 다음 Make 명령1 을 실행하면 됩니다,
make c에 컴파일된 공유 라이브러리를 dist/c/lib 에 제공하고 qiskit.h 헤더에는 의 모든 함수 선언을 dist/c/include. 정확한 라이브러리 이름은 플랫폼에 따라 다릅니다 플랫폼에 따라 다릅니다(예: UNIX에서는libqiskit.so , MacOS 에서는 libqiskit.dylib ).
(이 단계에서는 현재 많은 경고가 발생하는데, 이는 예상되는 현상이며 걱정할 필요는 없습니다. 향후 버전에서는 경고가 제거될 예정입니다.)
그런 다음 키스킷 C 헤더와 라이브러리를 사용하여 C 프로그램을 컴파일할 수 있습니다:
gcc example.c -o example.o -I /path/to/dist/c/include -L /path/to/dist/c/lib -lqiskit링크하는 동안 키스킷 라이브러리를 찾도록 하려면 런타임 라이브러리 경로를 다음과 같이 설정한다 include /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_PATHMacOS의 경우:
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를 사용하는 데는 두 가지 독립적인 방법이 있습니다:
- Qiskit C API를 사용하는 Python 확장 모듈 을 빌드합니다. 1~5단계를 따르십시오. 이 방법은
qiskitPython 패키지와 함께 제공되는 C 헤더를 사용하며, Rust나 cbindgen이 필요하지 않습니다. - UNIX 계열 섹션에서 수행한 것과 마찬가지로, 순수 C 프로그램에서 링크할 수 있는 독립형 C 라이브러리를 빌드하십시오. 1단계를 완료한 후, 추가 요구 사항이 나열된 ‘독립형 라이브러리 빌드 ’ 섹션으로 건너뛰세요.
요구사항
- 일부 단계에서는 관리자 권한이 필요합니다.
- 5~8 GB의 여유 디스크 공간.
- C 컴파일러: 1단계에서 설치한 Microsoft Visual C++ (MSVC).
- 1단계에서 설치한 64비트 Python ( 3.10 이상).
시작하기 전에
작업 공간을 만들어 보세요. 이는 로컬 드라이브에 있는 짧은 경로여야 합니다. OneDrive-synced 폴더(예: ‘문서’ 또는 ‘바탕화면’), 네트워크 드라이브, 공백이나 ASCII가 아닌 문자가 포함된 경로는 사용하지 마십시오. 사용자 이름에 영어가 아닌 문자가 포함되어 있다면, 해당 사용자 이름을 사용자 폴더 안에 넣지 마십시오.
올바른 작업 공간 경로의 예: C:\workspace, D:\workspace, C:\Users\john\workspace
1단계. 전제조건 설치
이 파일은 용량이 큽니다(2
5 GB, 1030분 소요). 먼저 설치해 보시면 컴퓨터가 호환되는지 바로 확인할 수 있습니다.Note관리자 권한이 필요합니다.
옵션 A —
wingetPowerShell 터미널을 열고 다음 명령을 실행합니다: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 C++ 빌드 도구 웹사이트를 열고 ‘빌드 도구 다운로드’를 클릭합니다. 실행 파일을 실행하여 설치를 시작하십시오.
'Visual Studio 설치 ' 창이 열리면, '워크로드' 탭에서 "C++을 사용한 데스크톱 개발"을 선택합니다. 자세한 내용은 'Visual Studio에서 C 및 C++ 지원 설치' 페이지를 참조하십시오.
winget install Microsoft.VisualStudio.CodeVisual Studio Code 사이트에서 VS Code를 다운로드하거나 다음 명령을 실행하세요. 다운로드한 실행 파일을 실행하여 VS Code를 설치하세요.설치가 완료되면 다음 단계를 진행하십시오:
- VS Code 열기
- ‘파일’ → ‘폴더 열기’를 클릭한 다음, 작업 공간을 선택합니다(예:
C:\workspace). - “터미널” → “새 터미널”을 클릭하여 PowerShell 터미널을 엽니다.
- 왼쪽에 있는 확장 프로그램 아이콘을 클릭하거나 Ctrl+Shift+X를 누르세요.
ms-vscode.cpptools``ms-python.python‘확장 기능’ 창에서,ms-toolsai.jupyter, 및 을 검색하여 설치하세요.
별도의 지시가 없는 한, 이 가이드에 나와 있는 나머지 명령어들은 VS Code 터미널에서 실행하십시오. VS Code 터미널은 Windows에 기본으로 포함된 명령 프롬프트와 혼동되지 않도록 기본적으로 PowerShell, 로 설정되어 있습니다.
워크스페이스 변수를 설정합니다.
workspace예를 들어, 작업 공간의 이름이 인 경우 다음 명령을 실행하세요:$WORKSPACE = "C:\workspace" # change to your workspace path mkdir $WORKSPACE -Force cd $WORKSPACEPython 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 웹사이트에서 Python 3.12 를 다운로드하십시오. 실행 파일을 실행하여 ‘ Python ’를 설치하십시오. 설치 과정에서 “ Python 를 PATH에 추가”를 선택한 다음, 위의 코드 조각을 다시 실행하여 해당 파일이 제대로 인식되는지 확인하십시오.
참고-
Microsoft Store( Python )는 C 헤더 파일이 포함되어 있지 않으므로 사용하지 마십시오. Microsoft Store가 실행된다면
python, ‘Windows 설정 → 앱 → 고급 앱 설정 → 앱 실행 별칭’으로 이동하여 해당 별칭을 비활성화하세요. -
Anaconda 사용자분들: (base) 접두사가 사라질 때까지 명령어를 실행하세요
conda deactivate. 문제가 해결되지 않으면 VS Code에서 새 터미널을 열어보세요.
-
랩 저장소를 복제하는 경우에만 필요합니다.
winget install Git.Git을(를) 실행하십시오.
2단계 - Qiskit을 사용하여 Python 가상 환경 설정하기
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'" }스크립트 실행을 허용한 후(사용자당 한 번), 가상 환경을 생성합니다:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned cd $WORKSPACE & $PYTHON_EXE -m venv .venv --prompt workspace .\.venv\Scripts\Activate.ps1활성화 과정에서 “스크립트가 비활성화되었습니다”라는 빨간색 오류 메시지가 표시된다면, 해당
Set-ExecutionPolicy줄의 코드가 실행되지 않은 것입니다. 수동으로 실행한 다음 다시 시도해 보세요.(workspace)이제 프롬프트에 가 표시되어야 합니다.확인:
Get-Command python | Select-Object -First 1 -ExpandProperty Source # → workspace\.venv\Scripts\python.exepython -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선택 사항이며, 로컬 시뮬레이션 시에만 필요합니다.Note설정 후에는 실행하지
pip install --upgrade qiskit마십시오. 새로운 소버전으로 업그레이드하면 이전 버전을 기준으로 빌드된 C 확장 기능이 작동하지 않게 됩니다.
3단계 - MSVC 환경 불러오기
새로운 Python 세션마다(예를 들어, Jupyter 커널을 재시작할 때마다) 다음 코드를 실행하십시오. MSVC 개발 환경을 자동으로 찾아서 불러오므로, x64 에 포함된 명령 프롬프트를 사용할 필요가 없습니다.
이 문서의 예제는 MSVC를 사용하여 setuptools C 확장 모듈을 빌드합니다. qiskit.h``QISKIT_PYTHON_EXTENSION일반적으로 init 함수 내에서 를 정의하고, 를 포함시키며, 를 호출합니다 qk_import() . 빌드 시에는 의 qiskit.capi.get_include() 헤더 파일만 필요하며, 라이브러리는 링크되지 않습니다. 자세한 내용은 “C 언어를 사용하여 Python 에서 Qiskit 확장 하기”를 참조하십시오.
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"라고 출력되면 툴체인이 준비된 것입니다.
이 패키지는 ‘ Python 에서 C를 사용하여 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 인터프리터를 자동으로 선택하도록 할 수 있습니다.
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에서 다음 내용을 포함하는 파일을 생성하세요
.vscode/extensions.json:{ "recommendations": ["ms-python.python", "ms-toolsai.jupyter", "ms-vscode.cpptools"] }
독립 실행형 라이브러리 빌드하기
이 섹션에서는 독립형 C 라이브러리를 빌드합니다. 이 라이브러리는 UNIX 계열 섹션에서 설명한 대로 순수 C 프로그램을 컴파일하고 링크하려는 경우에만 필요합니다. 1단계의 필수 조건 외에도, 다음 도구가 필요합니다:
- Rust 컴파일러: 예를 들어 소스에서 키스킷 설치에 대한 가이드를 참조하세요
cargo install cbindgencbindgen: C 헤더 파일을 생성하는 도구로, 다음 명령어로 설치할 수 있습니다. 명령줄에서 이 도구를 실행할 수 있도록 설정해야 하며, 이를 위해서는variable에PATHcargo 경로를 포함하도록 업데이트해야 할 수도 있습니다.- Python 설치 환경에서 와 모두에
python3.lib접근할 수 있는 경우python3.dll - 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그러면
target/release에.dll동적 라이브러리와 관련.dll.lib파일이 생성됩니다. 다음으로 다음을 사용하여 헤더를 생성합니다cbindgen --crate qiskit-cext --output dist\c\include\qiskit.hdist\c\include이렇게 하면. 파일에 MSVC 호환 헤더가 작성됩니다.이제 를 사용하여
clC 프로그램을 컴파일할 수 있습니다. 컴파일러가 qiskit 라이브러리를 찾을 수 있도록 하려면, 변수에PATH다음을 포함시키세요target\release.$env:PATH = "\path\to\target\release;" + $env:PATH cl example.c qiskit_cext.dll.lib -I\path\to\dist\c\includepython3.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] }
문제점 해결
Microsoft Store에서 앱 설치 프로그램을 업데이트하거나, 해당 수동 다운로드 링크를 이용하세요
MSVC 로드 셀(3단계)을 다시 실행하거나, x64 의 네이티브 도구 명령 프롬프트를 사용하십시오
‘설정’ → ‘앱’ → ‘고급 앱 설정’ → ‘앱 실행 별칭’으로 이동하여 비활성화하세요.
python.exe실행한
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned다음 다시 시도하세요실행하고
python -c "import qiskit.capi; print(qiskit.capi.get_include())"경로가 있는지 확인하세요pip install "qiskit[visualization]~=2.4.2"실행pip install qiskit-aer --only-binary=:all:을(를) 실행하십시오. 그래도 안 되면 Python 3.12 를 사용하거나, 선택 사항인 aer를 건너뛰세요빌드된 Qiskit C 확장 모듈과 설치된 Qiskit 버전은 반드시 동일해야 합니다. 다음 명령어를 사용하여 Qiskit을 다시 설치하십시오.
pip install "qiskit~=2.4.2"C 확장 기능은 실행 중에 다시 가져올 수 없습니다. 커널을 재시작하고, MSVC 명령어(3단계)를 다시 실행한 다음, 다시 빌드하십시오
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedC:\에 짧은 루트 경로를 사용하거나(예:
C:\workspace, 또는 설치 단계에서 설정한 경로), ‘긴 경로’ 기능을 활성화하세요: 설정 → 시스템 → 개발자용 → 긴 경로환경에서 와
CONDA_PREFIX가 모두 사라질 때까지CONDA_DEFAULT_ENV실행하십시오conda deactivate.$env:CONDA_PREFIX...에 확인해 보세요. 문제가 계속되면, 새로운 PowerShell 창(Anaconda 프롬프트가 아닌)을 열고 2단계부터 다시 시도하십시오.이 가상 환경은 conda의 C 런타임을 상속받았으며, 해당 위치에서 수정할 수 없습니다. 해당 파일을 삭제하고, Python 웹사이트에서 Python 3.12 파일을 다운로드한 다음, 다시 빌드하십시오.
Remove-Item -Recurse -Force .venv실행한 다음, 1단계의 ‘ Python ’ 감지 스니펫을 다시 실행하여 설정을 완료한$PYTHON_EXE후, 가상 환경을 다시 생성하십시오(2단계).Conda가 가상 환경으로 유출되고 있는 것으로 보입니다. 이 바로 위에 있는 두 가지 사항을 모두 확인해 주세요. 또한 Python 가 64비트인지 확인하십시오:
python -c "import platform; print(platform.architecture())"사용자 이름이나 작업 공간 경로에 ASCII가 아닌 문자가 포함되어 있습니다. 작업 공간을 ASCII 문자만 포함된 짧은 경로(예:
C:\workspace)로 이동하십시오작업 공간 폴더는 OneDrive 을 통해 동기화됩니다. 다음과 같이 로컬 경로로 이동하세요.
C:\workspace작업 공간에서 해당
_smoke_pkg폴더를 삭제하고, MSVC 로드 셀을 다시 실행한 다음, 스모크 테스트 셀을 다시 실행하십시오사용자 네트워크에서는 HTTPS 을 가로채는 프록시를 사용하고 있습니다. 다음 명령을 실행해
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org qiskit보거나 네트워크 관리자에게 프록시 CA 인증서를 요청해 보세요‘Windows 보안’ → ‘바이러스 및 위협 방지’ → ‘설정 관리’ → ‘제외 항목’으로 이동하여 작업 공간의
.venv및_smoke_pkg폴더를 Defender 제외 항목에 추가하세요관리자 액세스 권한이 필요합니다. IT 부서에 접근 권한을 요청하세요
.pyd 파일은 실행 중인 커널에 의해 잠겨 있습니다. 커널을 다시 시작하고(Ctrl+Shift+P → Jupyter: 커널 다시 시작), 3단계를 다시 실행한 다음, 다시 빌드하세요
PowerShell 대신 cmd.exe 에 접속해 계실 수도 있습니다.
C:\>프롬프트를 확인해 보세요: PowerShell 에는PS C:\>, cmd에는 이 표시됩니다. 시작 메뉴 또는 Win+X 키를 눌러 PowerShell 을 실행합니다설치 프로그램이 백그라운드에서 실행되는 동안 이
--passive --wait플래그들은 PowerShell 을 차단합니다. 작업 표시줄에서 “Visual Studio Installer” 창이 열려 있는지 확인하세요. 설치하는 데 10~30분이 소요될 수 있습니다
다음 단계
- Qiskit C API를 사용하여 Python 를 확장하는 방법을 알아보세요.
- Qiskit을 설치하세요.
- Qiskit C API 참조 문서를 살펴보세요.
Footnotes
-
Make를 설치하지 않았다면, Qiskit 루트
Makefile디렉토리에서 필요한 명령어를 확인하세요. 아니면 그냥 Make를 설치하세요; 아직 늦지 않았습니다. ↩