Skip to main content
IBM Quantum Platform

키스킷 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있습니다. 명령줄에서 이 도구를 실행할 수 있도록 설정해야 하며, 이를 위해서는 변수를 PATH export하여 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_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를 사용하는 데는 두 가지 독립적인 방법이 있습니다:

  • 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단계. 전제조건 설치

  • 이 파일은 용량이 큽니다(25 GB, 1030분 소요). 먼저 설치해 보시면 컴퓨터가 호환되는지 바로 확인할 수 있습니다.

    Note

    관리자 권한이 필요합니다.

    옵션 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 C++ 빌드 도구 웹사이트를 열고 ‘빌드 도구 다운로드’를 클릭합니다. 실행 파일을 실행하여 설치를 시작하십시오.

    'Visual Studio 설치 ' 창이 열리면, '워크로드' 탭에서 "C++을 사용한 데스크톱 개발"을 선택합니다. 자세한 내용은 'Visual Studio에서 C 및 C++ 지원 설치' 페이지를 참조하십시오.

  • winget install Microsoft.VisualStudio.CodeVisual Studio Code 사이트에서 VS Code를 다운로드하거나 다음 명령을 실행하세요. 다운로드한 실행 파일을 실행하여 VS Code를 설치하세요.

    설치가 완료되면 다음 단계를 진행하십시오:

    1. VS Code 열기
    2. ‘파일’ → ‘폴더 열기’를 클릭한 다음, 작업 공간을 선택합니다(예: C:\workspace).
    3. “터미널” → “새 터미널”을 클릭하여 PowerShell 터미널을 엽니다.
    4. 왼쪽에 있는 확장 프로그램 아이콘을 클릭하거나 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 $WORKSPACE
  • 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 웹사이트에서 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.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 선택 사항이며, 로컬 시뮬레이션 시에만 필요합니다.

    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 헤더 파일을 생성하는 도구로, 다음 명령어로 설치할 수 있습니다. 명령줄에서 이 도구를 실행할 수 있도록 설정해야 하며, 이를 위해서는 variablePATH cargo 경로를 포함하도록 업데이트해야 할 수도 있습니다.
  • 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.h

    dist\c\include이렇게 하면. 파일에 MSVC 호환 헤더가 작성됩니다.

    이제 를 사용하여 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] }
    

문제점 해결

  • 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 RemoteSigned

  • C:\에 짧은 루트 경로를 사용하거나(예: 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분이 소요될 수 있습니다


다음 단계

권장사항

Footnotes

  1. Make를 설치하지 않았다면, Qiskit 루트 Makefile 디렉토리에서 필요한 명령어를 확인하세요. 아니면 그냥 Make를 설치하세요; 아직 늦지 않았습니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.