주 콘텐츠로 건너뛰기

새로운 Qiskit 1.0 패키지 설치하기

Qiskit 1.0은 이전 Qiskit 버전과 다른 패키징 구조를 사용하며, Qiskit 1.0에 대응하지 않는 패키지를 사용하는 환경에서 문제가 발생할 수 있습니다.

주의

기존 Python 가상 환경을 Qiskit 1.0으로 인플레이스 업그레이드하지 마세요.

향후 이와 유사한 패키징 호환성 파괴 변경을 하지 않을 것입니다. 이것은 Qiskit 1.0 출시 시점에 한 번만 수행되는 변경으로, 향후 패키징이 최대한 쉬워지도록 하기 위한 것입니다.

이 가이드는 다음 섹션으로 구성되어 있습니다. 해당하는 섹션만 확인하면 됩니다.

  • 사용자는 사용자용 섹션을 읽어보세요.
  • Qiskit에 의존하는 패키지를 개발하거나 유지보수하는 경우, 개발자용 섹션을 읽어보세요.
  • Qiskit 1.0 설치 또는 임포트에 문제가 발생하면, 문제 해결 섹션을 확인하세요.

이전 패키지 구조와 변경 이유에 대해 알고 싶다면, 패키징 호환성 파괴 변경 사항 개요를 확인하세요.

사용자용

Qiskit 1.0을 설치하려면 새 가상 환경을 시작해야 합니다. 기존 설치를 인플레이스로 Qiskit 1.0으로 업그레이드하는 것은 매우 까다롭고 오류가 발생하기 쉽습니다.

참고

이 섹션의 예제는 Python 표준 라이브러리에 포함된 venv 모듈을 사용합니다. virtualenvconda 같은 다른 도구를 사용하는 경우, 해당 도구의 문서를 참조하세요.

Linux 및 macOS 명령어에는 bash 유사 구문이 사용됩니다. Windows 명령어에는 PowerShell이 사용됩니다.

새 환경 만들기

  1. 작업 중인 각 프로젝트 디렉터리에서 Python 3.8 이상의 원하는 버전을 사용하여 새 가상 환경을 만드세요.

    python3 -m venv .venv
  1. 환경을 활성화하세요.

    source .venv/bin/activate
  2. 원하는 패키지를 설치하세요. 모든 의존성을 하나의 pip install 명령어에 포함하여 설치해야 합니다.

    pip install 'qiskit>=1'

    선택적으로 추가 패키지를 인수로 포함할 수 있습니다. 예를 들어:

    pip install 'qiskit>=1' jupyterlab pandas matplotlib

    Qiskit 1.0에는 호환성 파괴 변경이 포함되어 있으므로, 여러 패키지가 아직 호환되지 않는 것으로 표시되어 있습니다. 따라서 해당 패키지의 새 버전이 출시될 때까지 pip에서 오류가 발생할 수 있습니다. 이전 버전의 패키지가 레거시 qiskit-terra 패키지에 의존하는 경우도 있습니다. 이러한 패키지는 이 명령어 실행 시 오류를 반환하지 않을 수 있지만, import qiskit 실행 시 오류가 발생할 수 있습니다. qiskit-terra에 직접 의존하는 패키지는 설치하지 마세요.

    개별 install 명령어에서 pipqiskit-terra를 설치하지 못하도록 하는 한 가지 방법은 qiskit-terra를 불가능한 버전으로 설정하는 제약 조건 파일을 사용하는 것입니다. 예를 들어, qiskit-terra>=1.0 줄이 포함된 제약 조건 파일을 사용하면, 의존성이 qiskit-terra를 설치하려 해도 게시된 버전 중 요구 사항과 일치하는 것이 없게 됩니다.

    이러한 파일을 GitHub Gist https://qisk.it/1-0-constraints에 제공하고 있으며, 다음과 같이 사용할 수 있습니다:

    pip install -c https://qisk.it/1-0-constraints qiskit [other packages]

    패키지가 qiskit-terra를 요구하는 경우, 해결 실패가 표시됩니다.

    주의

    이 가상 환경에 Qiskit 1.0과 호환되지 않는 패키지를 설치하지 마세요. 이러한 패키지가 필요한 경우, Qiskit 0.45 또는 0.46이 설치된 별도의 가상 환경에 설치하세요.

    기존 환경이 있는 경우, pipdeptree를 사용하여 설치된 패키지의 요구 사항을 조회하고 qiskit<1을 요구하는지 확인할 수 있습니다. qiskit<1을 요구하는 패키지의 경우, Qiskit 1.0과 호환되는 업데이트가 있는지 확인하세요.

    문제가 발생하면 문제 해결 섹션을 참조하거나, Qiskit Slack에서 질문하세요. 버그라고 생각되면, Qiskit에 이슈를 생성할 수 있습니다.

  3. 환경을 즉시 사용할 계획이 없다면, deactivate 명령어를 사용하여 환경에서 나오세요.

새 환경 사용하기

새 명령줄 세션을 시작할 때마다, 프로젝트 디렉터리로 이동한 후 activate 명령어를 실행하여 환경을 "활성화"해야 합니다:

source .venv/bin/activate

개발자용

Qiskit에 의존하는 패키지를 유지보수하는 경우, 이 정보를 사용하여 호환성을 올바르게 표현하고 Qiskit 1.0에 대해 테스트하는 방법을 알아보세요.

요구 사항 권장 사항

패키지가 Qiskit 1.0과 호환되는지 확실하지 않은 경우, qiskit>=0.45,<1(또는 기타 적절한 하한)을 요구하도록 권장합니다. 이는 NumPy 2.0 호환성에 대한 것과 동일한 권장 사항입니다.

Qiskit 1.0 릴리스 후보인 버전 1.0.0rc1이 2024년 2월 1일에 출시됩니다. 이에 대해 패키지를 테스트하고, 가능한 빨리 상한 버전 제한을 해제한 새로운 (호환되는) 버전의 패키지를 출시해야 합니다.

Qiskit 1.0에 대한 테스트 권장 사항

이 권장 사항은 Qiskit main 브랜치에 대한 사전 테스트와 1.0.0rc1(및 해당하는 경우 이후) 릴리스 후보에 대한 테스트에 적용됩니다.

Qiskit 변경으로 인해 PR 병합이 차단될 수 있으므로, 처음에는 Qiskit main 브랜치에 대한 CI 성공을 브랜치 보호 조건으로 설정하지 않는 것을 권장합니다. Qiskit 릴리스 후보가 출시되고, 패키지의 모든 의존성이 Qiskit 1.0을 지원한 후에는, 패키지가 Qiskit 1.0과 호환되도록 최신 릴리스 후보에 대한 성공을 브랜치 보호 조건으로 설정하는 것을 권장합니다.

패키지나 전이적 의존성 중 qiskit<1 버전 고정이 없는 경우, 평소처럼 하나의 pip install 명령어로 테스트 가상 환경을 만들고, 적절하게 qiskit==1.0.0rc1 또는 qiskit==git+https://github.com/Qiskit/qiskit.git@main을 직접 지정해야 합니다. 이것이 완전히 유효한 환경을 보장하는 가장 신뢰할 수 있는 방법입니다.

패키지의 의존성 그래프에서 qiskit<1 버전 고정이 있는 유일한 컴포넌트가 자체 패키지인 경우, CI 스위트에서 먼저 요구 사항 파일을 임시로 패치하여 Qiskit 1.0을 허용한 다음, 이전과 같이 단일 단계로 환경을 설치할 수 있습니다. 또는, 범용 환경 업그레이드를 위한 다음 규칙을 사용하되, 가능한 빨리 단일 환경 해결로 전환하세요.

전이적 의존성 중 하나 이상이 아직 Qiskit 1.0을 지원하는 릴리스 버전이 없는 경우, 수동으로 변경해야 합니다. 다음은 시도해 볼 수 있는 여러 전략으로, 선호도 순서(가장 선호에서 가장 덜 선호)입니다:

  • 문제가 되는 의존성의 개발 버전에서 버전 고정이 해제된 경우, 해당 main 브랜치에서 설치하여 단일 단계로 테스트 환경을 구축합니다.
  • 가능한 경우, 테스트 환경에서 해당 의존성 사용을 제외합니다.
  • 평소와 같은 방법으로 테스트 환경을 만든 다음, 수동으로 Qiskit 1.0을 사용하도록 오버라이드합니다.

기존 환경 수동 업그레이드

주의

이 프로세스는 의도적으로 유효하지 않은 환경을 만듭니다. 따라서 이를 사용한 테스트는 신뢰도가 낮습니다. 테스트가 통과하는 것처럼 보일 수 있지만, 이것이 패키지가 Qiskit 1.0과 호환됨을 보장하지는 않습니다. 환경이 자체적으로 일관성이 없고 유효한 환경에는 존재하지 않는 파일을 포함할 수 있으며, 오버라이드된 패키지의 동작이 Qiskit 1.0에서 변경될 수 있기 때문입니다.

참고

의존성 중 하나가 개발 브랜치에서도 qiskit<1을 고정하는 경우, Qiskit 1.0과 전혀 작동하지 않을 수 있으며, 이로 인해 테스트가 실행되지 않는 경우 해당 패키지가 호환될 때까지 기다려야(또는 협력해야) 할 수 있습니다.

환경을 현재 위치에서 업그레이드하려면 다음 단계를 따르세요:

  1. 평소처럼 환경을 만들되, qiskit 또는 qiskit.providers 네임스페이스를 확장하는 패키지가 설치되지 않았는지 확인하세요.

  2. qiskitqiskit-terra를 모두 제거하여 둘 다 존재하지 않도록 하세요:

pip uninstall --yes qiskit qiskit-terra

이 시점에서 환경의 site-packages에는 qiskit 디렉터리가 포함되어 있지 않아야 합니다. 매번 CI 실행 시 확인할 필요는 없지만, 로컬에서 스크립트를 디버깅하는 경우 다음 단계에 따라 확인하세요:

  1. 가상 환경의 python에서 다음 명령어를 실행하세요:
import site
print(site.getsitepackages())
  1. 해당 디렉터리에 qiskit 디렉터리가 포함되어 있지 않은지 확인하세요. 포함되어 있다면, 네임스페이스를 확장하는 패키지가 설치되어 있을 가능성이 높으므로, 이를 찾아서 의존성을 제거해야 합니다.

  2. 다음 명령어 중 하나로 Qiskit 1.0의 대상 버전을 설치하세요:

  • 원하는 릴리스 후보가 게시된 후:
    pip install 'qiskit==1.0.0rc1'
  • main 브랜치 의존성의 경우 (또는 @ 뒤에 원하는 git 리비전 식별자를 대체):
    pip install 'git+https://github.com/Qiskit/qiskit.git@main'

이제 Qiskit에서 테스트할 수 있는 환경이 준비되었습니다. import qiskitImportError를 발생시키거나, 의존성을 찾는 데 어려움이 있다면, Qiskit의 유효하지 않은 환경 보호 섹션의 조언을 참조하세요.

수동 GitHub Actions 워크플로우 예제

다음 워크플로우는 야간에 실행되는 예약 작업을 설정합니다. 이 작업은 Qiskit 1.0용 테스트 환경을 설정하고 pytest(또는 필요한 테스트 단계)를 실행합니다.

qiskit<1 전이적 의존성이 없는 패키지의 경우:

on:
schedule:
- cron: '0 3 * * *'
jobs:
test_main:
name: Test Qiskit main
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Create environment
run: |
set -e
# First ensure the standard tools are up-to-date.
python -m pip install --upgrade pip wheel setuptools
# Note that this resolves everything in a single command.
# If it fails, at least one package likely requires `qiskit<1`.
python -m pip install --upgrade \
-c constraints.txt \
-r requirements-dev.txt \
. \
'git+https://github.com/Qiskit/qiskit.git@main'
- name: Run tests
run: pytest

qiskit<1을 고정하는 피할 수 없는 전이적 의존성이 있는 패키지의 경우, 유효하지 않은 환경을 빌드합니다:

on:
schedule:
- cron: '0 3 * * *'
jobs:
test_main:
name: Test Qiskit main
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Create environment
run: |
set -e
python -m pip install --upgrade pip wheel setuptools
# Install the regular test environment.
python -m pip install --upgrade \
-c constraints.txt \
-r requirements-dev.txt \
.
# Uninstall `qiskit` and `qiskit-terra`.
python -m pip uninstall --yes qiskit qiskit-terra
# Install the new version of Qiskit
python -m pip install 'git+https://github.com/Qiskit/qiskit.git@main'
- name: Run tests
run: pytest

tox 설정 예제

다음은 Qiskit 1.0용 테스트 환경을 구축하고 pytest(또는 필요한 테스트 단계)를 실행하기 위한 tox.ini 섹션 예제입니다.

유효한 환경에 Qiskit 1.0 설치를 방해하는 요소가 없는 경우:

[tox]
minversion = 4.0.0

# This environment section should set up your regular test build.
# We'll extend it after, and this one is just an example.
[testenv]
install_command = pip install -c {toxinidir}/constraints.txt -U {opts} {packages}
deps =
-r{toxinidir}/requirements-dev.txt
commands =
pytest

# This is an override environment to install Qiskit main.
# We're assuming that you have a requirement like `qiskit>=0.45`
# in your packages metadata requirements.
[testenv:qiskit-main]
# Inherit the base dependencies, and add the additional requirement.
deps =
[{testenv}deps]
git+https://github.com/Qiskit/qiskit@main
# All other options, like the `commands` section, are inherited from `testenv`.

패키지나 전이적 의존성에 피할 수 없는 qiskit<1 고정이 있는 경우, 위 섹션의 수동 환경 구성을 사용하여 테스트하는 것을 권장합니다. tox는 환경 격리와 설치 순서에 대해 더 엄격하여 여러 복잡성을 도입하기 때문입니다. 이는 tox의 올바른 동작이지만(유효하지 않은 환경을 구성해서는 안 되므로), 유효하지 않은 환경을 구축하는 것을 이미 알고 있기 때문에 이러한 검사가 방해가 됩니다.

[tox]
minversion = 4.0.0

# This environment section should set up your regular test build.
# We'll extend it later. This is just an example.
[testenv]
install_command = pip install -c {toxinidir}/constraints.txt -U {opts} {packages}
deps =
-r{toxinidir}/requirements-dev.txt
commands =
pytest

[testenv:qiskit-main]
# Set a sequence of commands to run in the environment after everything has been installed,
# but before the main test suite.
commands_pre =
pip uninstall --yes qiskit qiskit-terra
pip install 'git+https://github.com/Qiskit/qiskit@main'
# All other sections, like the dependencies and the 'commands' section are inherited.

문제 해결

Qiskit 1.0의 패키징 변경은 복잡하며, Python의 표준 도구 pip은 배포 구조의 변경 사항을 전달하기에 충분히 풍부하지 않아 사용자에게 문제를 일으킬 수 있습니다. 유효하지 않은 환경을 감지하면 거짓 양성 없이 빠르고 명확하게 실패하도록 Qiskit을 구현했습니다. 오류 메시지를 받는 것이 불편할 수 있지만, 경험상 표면적으로 정상 작동하는 것처럼 보이다가 나중에 미묘한 방식으로 실패하는 것보다 문제를 즉시 인식하는 것이 훨씬 낫습니다.

이 섹션에는 발생할 수 있는 패키징 오류와 해결 방법이 포함되어 있습니다.

이러한 문제 대부분은 Qiskit에 고유하지 않으므로, 문제가 되는 부분이 Qiskit과 관련이 없더라도 이 조언이 유용할 수 있습니다.

import qiskit에서 "ModuleNotFoundError: No module named 'qiskit'" 발생

Python이 Qiskit 설치를 찾을 수 없습니다.

Qiskit을 확실히 설치했다면, 올바른 가상 환경이 활성화되지 않은 것일 수 있습니다. 가상 환경 활성화 섹션에서 지침을 확인하세요.

Jupyter를 사용하는 경우 이 오류가 나타나면, Jupyter가 Qiskit과 동일한 가상 환경에 설치되어 있는지 확인하세요. Jupyter를 종료하고, 명령줄에서 Qiskit 가상 환경을 활성화한 후 pip install jupyterlab(또는 사용하는 노트북 인터페이스)을 실행하고, Jupyter를 다시 여세요.

import qiskit은 성공하지만 작업 시 "AttributeError: module 'qiskit' has no attribute '...'" 반환

이는 환경에 네임스페이스를 확장하는 패키지(예: 이전 버전의 Qiskit Aer 또는 오래전에 폐기된 Qiskit IBM Q® Provider)와 함께 이전 버전의 Qiskit이 있었고, 이후 Qiskit이 제거된 것을 의미할 수 있습니다. 가장 쉬운 방법은 새 가상 환경을 시작하고 최신의, 폐기되지 않은 패키지만 설치하는 것입니다.

새 가상 환경을 방금 시작했거나, 레거시 패키지가 문제가 아닌 것이 확실하다면, 현재 작업 디렉터리(Python/Jupyter를 실행할 때 셸 세션이 있었던 디렉터리)에 qiskit이라는 폴더가 포함되어 있지 않은지 확인하세요. Python의 기본 규칙은 모듈을 import할 때 검색 경로에서 현재 작업 디렉터리를 매우 일찍 검색하므로, 중복된 이름의 디렉터리가 임포트 문제를 일으킬 수 있습니다.

pip이 일부 패키지를 함께 설치하기를 거부함

많은 항목이 포함된 pip install 명령어를 실행한 후 다음과 같은 오류가 나타날 수 있습니다:

ERROR: Cannot install qiskit-dynamics==0.4.4 and qiskit==1.0.0 because these package versions have conflicting dependencies.

The conflict is caused by:
The user requested qiskit==1.0.0
qiskit-dynamics 0.4.4 depends on qiskit<1.0

To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

이것은 실제 해결 충돌을 설명합니다. 이러한 배포판을 동시에 설치할 수 있는 유효한 방법이 없습니다.

Qiskit 1.0의 맥락에서, 이는 설치하려는 배포판 중 하나에 qiskit<1.0과 같은 요구 사항이 포함되어 있기 때문일 수 있습니다. 이는 해당 배포판의 개발자가 아직 Qiskit 1.0과 호환되지 않는 것으로 표시했음을 의미합니다.

해당 개발자에게 Qiskit 1.0과 호환되는 새 버전을 언제 출시할 것인지 (정중하게) 문의할 수 있지만, 먼저 이미 이를 요청하는 공개 이슈나 풀 리퀘스트가 없는지 확인하세요. 이에는 시간이 걸린다는 점을 유의하세요. 개발자들에게 새 버전의 배포판을 준비할 수 있도록 약 한 달 정도의 시간을 주세요! 그때까지는 해당 배포판을 Qiskit 1.0과 함께 설치할 수 없습니다. 해당 배포판을 계속 사용하려면, 새 가상 환경을 만들고 다른 패키지와 함께 Qiskit 0.45 또는 0.46(또는 지원하는 버전)을 사용하세요.

주의

이 오류가 발생하면, pip install을 여러 번 호출하여 환경을 구축하려 하지 마세요. 해당 명령어는 아마 실패하지 않겠지만, 유효하지 않은 환경이 만들어질 것입니다. 그러면 이 섹션에 설명된 다른 오류 메시지가 나타날 수 있습니다.

Python 패키징 권한의 충돌 해결에 대한 문서도 참조할 수 있습니다.

pip은 성공하지만 pip install 명령어 실행 후 오류를 출력함

pip의 출력에서 다음과 같은 오류가 나타날 수 있습니다:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behavior is the source of the following dependency conflicts.
some-distribution 0.4.4 requires qiskit>=0.44,<1, but you have qiskit 1.0.0 which is incompatible.

첫 번째 줄은 일반적으로 그대로 나타나지만(pip 23.3 기준), 두 번째 줄은 정확한 문제에 따라 변경되며, 이와 같은 줄이 여러 개 있을 수 있습니다. pip은 오류 메시지에도 불구하고 요청한 작업을 성공적으로 수행했음을 표시할 수 있습니다.

이는 환경이 충돌 상태에 있으며 올바르게 작동할 것이라고 확신할 수 없음을 의미합니다. 문제를 해결하려면, pip의 메시지 목록을 검토하고 충돌하는 요구 사항이 있는 모든 패키지가 필요한지 판단하세요. 때로는 의존성 간에 실제 충돌이 있을 수 있습니다. 호환되지 않는 요구 사항이 있는 의존성을 분리하기 위해 여러 가상 환경이 필요할 수 있습니다.

가장 안전한 선택은 새 가상 환경을 시작하고(실제 충돌이 있는 경우 둘 이상), 충돌 상태의 환경을 삭제하는 것입니다.

가상 환경을 설정할 때, 필요한 모든 의존성을 포함하는 하나의 pip install 명령어만 실행하세요. 이것이 pip이 충돌 없이 올바르게 해결된 환경을 찾는 가장 신뢰할 수 있는 방법입니다. 환경 설정 후에도 충돌 문제가 계속 발생하면, 추가적인 pip install 또는 pip uninstall 명령어 실행을 피하세요. pip은 후속 명령어에서 환경의 일관성을 유지하는 것을 보장하지 않습니다.

참고

여러 가상 환경으로 작업하는 것이 걱정된다면, Python 개발과 사용에는 종종 여러 가상 환경이 사용됩니다. 별도의 프로젝트에서 작업하기 위해 새 환경을 만드는 것은 일반적이고 좋은 관행입니다. 가상 환경 사용이 끝나면 해당 디렉터리를 삭제하면 됩니다. 여러 환경을 영구적으로 유지할 이유가 없습니다.

import qiskit에서 ImportError 발생

import qiskit을 실행할 때 다음과 같은 오류가 나타날 수 있습니다:

ImportError: Qiskit is installed in an invalid environment that has both Qiskit 1.0+ and an earlier version. You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit pre-1.0 and post-1.0. Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated. Qiskit unfortunately cannot enforce this requirement during environment resolution.

이 가이드의 모든 권장 사항을 따라 완전히 유효한 pip install 명령어를 실행했는데도 이 오류 메시지가 표시될 수 있습니다. 이는 사용자의 잘못이 아니지만, 오류 메시지는 여전히 정확하며 Qiskit은 안전하게 로드할 수 없습니다.

이 오류는 Qiskit 1.0과 이전 버전이 모두 포함된 유효하지 않은 환경에 Qiskit이 설치되어 있음을 의미합니다. 이는 qiskit-terra 배포판이 Qiskit 1.0과 함께 설치되어 있는 것이 특징입니다. pip list를 실행하여 어떤 배포판이 설치되어 있는지 확인할 수 있지만, 단순히 qiskit-terra를 제거하는 것으로는 이 문제를 해결할 수 없습니다.

불행히도 qiskit>=1.0qiskit-terra는 충돌하는 배포판이며, 함께 설치할 수 없습니다. 더 불행한 것은, 메타데이터 시스템의 제한으로 인해 이 충돌을 pip에 전달할 수 없다는 것입니다.

이 오류는 주로 다음 두 가지 상황 중 하나에서 발생합니다:

  • pip install 'qiskit>=1' something-else와 같은 명령어를 실행했고, something-elseqiskit-terra에 대한 요구 사항이 있는 경우.
  • 기존 환경에서 pip install -U qiskit을 실행하려 한 경우.

두 경우 모두, pip이 유용한 메시지를 반환한다는 보장이 없습니다.

개별 install 명령어에서 pipqiskit-terra를 설치하지 못하도록 하는 한 가지 방법은 qiskit-terra를 불가능한 버전으로 설정하는 제약 조건 파일을 사용하는 것입니다. 예를 들어, qiskit-terra>=1.0 줄이 포함된 제약 조건 파일을 사용하면, 의존성이 qiskit-terra를 설치하려 해도 게시된 버전 중 요구 사항과 일치하는 것이 없게 됩니다.

이러한 파일을 GitHub Gist https://qisk.it/1-0-constraints에 제공하고 있으며, 다음과 같이 사용할 수 있습니다:

pip install -c https://qisk.it/1-0-constraints qiskit [other packages]

패키지가 qiskit-terra를 요구하는 경우, 해결 실패가 표시됩니다.

Qiskit 1.0용 작동하는 환경 만들기

어떻게 이런 상황이 되었든, 새 가상 환경을 만드는 것이 훨씬 쉽습니다.

먼저, 어떤 패키지가 qiskit-terra에 대한 의존성을 도입하는지 알아내야 합니다. 손상된 환경을 사용하여 PyPI에서 pipdeptree를 설치하세요. 이것은 의존성 그래프를 생성하는 도구입니다:

pip install pipdeptree

qiskit-terraqiskit에 대한 의존성을 도입하는 패키지를 확인하세요(두 개의 별도 명령어입니다):

pipdeptree --reverse --package qiskit-terra
pipdeptree --reverse --package qiskit

출력은 다음과 같을 수 있습니다:

qiskit-terra==0.45.2
└── qiskit-dynamics==0.4.2 [requires: qiskit-terra>=0.23.0]
qiskit==1.0.0
├── qiskit-aer==0.13.2 [requires: qiskit>=0.45.0]
└── qiskit-ibm-provider==0.8.0 [requires: qiskit>=0.45.0]

위 예제에서, Qiskit 1.0과 호환된다고 선언한 두 개의 배포판(qiskit-aerqiskit-ibm-provider)과 여전히 qiskit-terra에 대한 의존성이 있는 하나의 배포판이 있습니다.

이 예제는 평평한 의존성 구조입니다. 이보다 훨씬 깊은 트리를 볼 수도 있습니다. qiskit-terra에 직접 의존하는 패키지(가장 낮은 들여쓰기)가 문제의 원인일 가능성이 가장 높지만, 이미 업데이트된 다른 패키지의 특정 이전 버전에 의존하는 경우 트리 아래쪽의 패키지가 문제일 수도 있습니다.

qiskit-terra에 대한 의존성이 있다는 것은 다음 중 하나를 의미할 수 있습니다:

  • 의존하는 패키지가 오래된 패키지이며, Qiskit 1.0을 지원하도록 업데이트되지 않을 것입니다.

    이 경우, 해당 패키지를 Qiskit 1.0과 함께 사용할 수 없으며, 이전 버전의 Qiskit을 계속 사용해야 합니다. 일반적으로 이는 의존하는 패키지가 최신 버전(환경이 새로운 것이고 더 낮은 버전으로 고정하지 않았다고 가정)이며 qiskit-terra에 대한 직접적인 요구 사항이 있는 것이 특징입니다.

  • 의존하는 패키지가 활발히 유지보수되고 있지만, 아직 Qiskit 1.0을 지원하지 않습니다.

    이 경우, 개발자가 호환 버전을 출시할 때까지 기다려야 합니다 - 인내심을 가져주세요! 일반적으로 이는 설치 명령어에서 버전을 지정하지 않았는데도 설치된 배포판이 최신 버전이 아닌 것이 특징입니다. https://pypi.org/ 에서 해당 배포판의 페이지를 찾아 최신 릴리스 버전을 확인할 수 있습니다.

    pipqiskit-terra에만 의존하는 패키지를 찾을 때까지 (수개월 또는 수년 전의 버전을 포함하여) 이전 버전을 검색했을 가능성이 높습니다.

    위 예제에서 이러한 일이 발생했습니다. 이 문서가 작성된 시점에서 qiskit-dynamics==0.4.4가 최신 릴리스 버전이었습니다.

여러 pip install 명령어로 이 환경을 구성한 경우(예: 환경이 오래되어 업데이트된 경우), 먼저 새 환경을 빌드할 때 하나의 pip install 명령어로 모든 패키지를 설치해 보세요. 문제가 지속되면, 원하는 패키지 중 하나 이상이 아직 Qiskit 1.0을 지원하지 않으며, pipqiskit>=1/qiskit-terra 충돌을 모르기 때문에 작동할 것이라고 판단하는 이전 버전을 찾고 있는 것입니다.

대신, pipdeptree 명령어를 사용하여 아직 Qiskit 1.0을 지원하지 않는 의존성을 식별하세요. Qiskit 1.0 환경을 구성할 때 아직 Qiskit 1.0을 지원하지 않는 패키지를 제외하거나, 이전 버전의 Qiskit을 계속 사용하세요. 지침은 새 환경 만들기를 참조하세요.

참고

이 섹션의 예제는 Qiskit 1.0이 출시되기 전에 생성되었습니다.

문제의 "이전" 배포판(qiskit-dynamics)은 올바르게 동작하고 있었습니다. 아직 Qiskit 1.0을 지원하는 것으로 알려지지 않았으므로, 요구 사항에 이를 표시했습니다. 이전에 출시된 버전에 요구 사항 변경을 소급 적용하는 것은 불가능하며, pip은 환경을 빌드할 때 작동하는 것을 찾기 위해 임의로 오래된 버전까지 검색합니다.

Qiskit 0.45 또는 0.46용 작동하는 환경 만들기

Qiskit 0.45 또는 0.46을 설치하려다 손상된 환경이 된 경우, pip이 필수가 아님에도 최신 버전의 패키지를 선택하려 하여 Qiskit 1.0을 설치한 것이 가장 가능성 높은 상황입니다. 이를 수정하는 가장 쉬운 방법은 새 가상 환경을 만든 다음, 필요한 모든 패키지와 명시적인 'qiskit<1' 항목을 포함하는 하나의 pip install 명령어를 실행하는 것입니다. pip이 이 의존성 그래프를 성공적으로 해결하면, 작동하는 가상 환경이 준비됩니다. 하나 이상의 배포판이 Qiskit 1.0 이상을 요구하는 경우, pip해결 실패 섹션의 것과 유사한 오류 메시지를 표시합니다.

손상된 환경 내에서 Qiskit 1.0용 작동하는 환경 만들기에 나열된 pipdeptree 명령어를 사용하여 qiskit>=1에 대한 명시적 요구 사항이 있는 배포판을 확인할 수도 있습니다.

개발자인데 환경이 확실히 올바르고, 여전히 오류가 발생하는 경우

먼저: 환경이 올바르다는 것을 절대적으로 확신해야 합니다. Qiskit이 손상된 환경을 판별하기 위해 사용하는 테스트는 매우 견고합니다. 구체적으로, 설치된 패키지에 대한 배포 정보를 importlib.metadata에 쿼리하고 반환된 버전 번호를 확인합니다. Qiskit 1.0 측 테스트는 이전 Qiskit 버전에는 있지만 Qiskit 1.0에는 없는 센티널 파일도 확인합니다.

Qiskit 개발자인 경우, 이전 편집 가능한 설치에서 남은 오래된 qiskit.egg-info 또는 qiskit-terra.egg-info(또는 *.dist-info) 디렉터리가 메타 경로(sys.meta_path 참조)에 있을 수 있습니다. 특히 작업 디렉터리에서 *.egg-info*.dist-info 디렉터리를 확인하세요. 체크아웃한 리포지토리의 루트에 있다면 삭제할 수 있습니다. 최악의 경우 pip install -e .를 다시 실행해야 할 수 있으며, 이것도 일반적으로 정리되지 않는 setuptools 빌드 프로세스의 일부이므로 가능성이 낮습니다.

위 정보가 도움이 되지 않고 환경이 정상이라고 100% 확신하는 경우(또는 의도적으로 손상된 환경을 테스트하려는 경우):

  1. Qiskit에 이슈를 생성하여 이 상황이 어떻게 발생했는지와 환경이 올바르다고 확신하는 이유를 설명해 주세요. 수정할 수 있도록 하겠습니다.
  2. 환경 변수 QISKIT_SUPPRESS_1_0_IMPORT_ERROR=1을 설정하여 예외를 억제할 수 있습니다.