Перейти до основного вмісту

Встанови новий пакунок Qiskit 1.0

Qiskit 1.0 використовує іншу структуру пакунків, ніж попередні версії Qiskit, і, ймовірно, спричинить проблеми в середовищах, де використовуються пакунки, що ще не готові до Qiskit 1.0.

обережно

Не намагайся оновити наявне Python-віртуальне середовище до Qiskit 1.0 безпосередньо.

Надалі ми не плануємо вносити подібних breaking-змін у пакунках. Це одноразова подія, приурочена до виходу Qiskit 1.0, — саме для того, щоб у майбутньому робота з пакунками була якомога зручнішою.

Цей посібник поділено на такі розділи. Тобі потрібно ознайомитися лише з тими розділами, які стосуються тебе.

  • Користувачі мають прочитати розділ Для користувачів.
  • Якщо ти розробляєш або підтримуєш пакунок, що залежить від Qiskit, прочитай розділ Для розробників.
  • Якщо в тебе виникають проблеми зі встановленням або імпортом Qiskit 1.0, переглянь розділ Усунення проблем.

Якщо тебе цікавить стара структура пакунків і причини її зміни, перегляньте огляд breaking-змін у пакунках.

Для користувачів

Щоб встановити Qiskit 1.0, потрібно створити нове віртуальне середовище. Оновлення наявної інсталяції до Qiskit 1.0 безпосередньо є дуже складним і ненадійним процесом.

примітка

У прикладах цього розділу використовується модуль venv, що входить до стандартної бібліотеки Python. Якщо ти використовуєш інший інструмент, наприклад virtualenv або conda, звернись до його документації.

Для команд на 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 містить breaking-зміни, тому кілька пакунків позначено як несумісні з ним. Тому під час встановлення pip може видавати помилки, доки не вийдуть нові версії цих пакунків. Старі версії пакунків також можуть залежати від застарілого пакунку qiskit-terra. Такі пакунки можуть не генерувати помилок під час виконання цієї команди, але можуть видавати помилку при запуску import qiskit. Не встановлюй жодних пакунків, що безпосередньо залежать від qiskit-terra.

    порада

    Один із способів заборонити pip встановлювати qiskit-terra при виконанні окремих команд install — використовувати файл обмежень, який вимагає неможливої версії 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. Якщо вважаєш, що це баг, можеш створити issue в Qiskit.

  3. Якщо ти не плануєш одразу використовувати середовище, введи команду deactivate, щоб вийти з нього.

Використовуй нове середовище

Щоразу, починаючи новий сеанс командного рядка, потрібно перейти до каталогу проєкту та «активувати» середовище, виконавши команду activate:

source .venv/bin/activate

Для розробників

Якщо ти підтримуєш пакунок, що залежить від Qiskit, використовуй цю інформацію, щоб правильно задекларувати сумісність і налаштувати тестування для Qiskit 1.0.

Рекомендації щодо вимог

Ми рекомендуємо, щоб твій пакунок вимагав qiskit>=0.45,<1 (або іншу відповідну нижню межу), якщо ти не впевнений у сумісності пакунку з Qiskit 1.0. Це та сама рекомендація, що застосовується для сумісності з NumPy 2.0.

Реліз-кандидат Qiskit 1.0, версія 1.0.0rc1, буде випущено 1 лютого 2024 року. Тобі слід протестувати свій пакунок із ним і якомога швидше випустити нову (сумісну) версію свого пакунку зі знятим верхнім обмеженням вимоги.

Рекомендації щодо тестування з Qiskit 1.0

Ці рекомендації стосуються як превентивного тестування відносно гілки main Qiskit, так і тестування з реліз-кандидатом 1.0.0rc1 (і пізнішими, якщо потрібно).

Ми не рекомендуємо спочатку налаштовувати захист гілки на основі успіху CI відносно гілки main Qiskit, оскільки зміни в Qiskit можуть заблокувати злиття PR. Після виходу реліз-кандидатів 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. Видали і qiskit, і qiskit-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 qiskit повертає ImportError або у тебе виникають труднощі з пошуком залежностей, перегляньте поради в розділі про захист від невалідного середовища у 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

Нижче наведено приклади секцій tox.ini для побудови тестового середовища для Qiskit 1.0 і запуску pytest (або будь-яких інших необхідних кроків тестування).

Якщо ніщо не перешкоджає встановленню 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 поруч із пакунком, що розширював його простір імен (наприклад, старі версії Qiskit Aer або давно застарілий Qiskit IBM Q® Provider), і потім 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, але спочатку перевір, чи немає відкритих issues або pull requests із таким же запитом там, де вони приймають коментарі. Пам'ятай, що це потребує часу; будь ласка, дай розробникам місяць-другий на підготовку нових версій дистрибутивів! До того часу цей дистрибутив не можна встановити поруч із Qiskit 1.0. Щоб продовжити використання цього дистрибутиву, створи нове віртуальне середовище та використовуй Qiskit 0.45 або 0.46 (або іншу підтримувану версію) разом із тим пакунком.

обережно

Якщо ти отримав цю помилку, не намагайся побудувати середовище, викликаючи pip install кілька разів. Ці команди, мабуть, не видадуть помилок, але ти створиш невалідне середовище. Після цього ти, швидше за все, побачиш деякі інші повідомлення про помилки, описані в цьому розділі.

Також можеш прочитати документацію від Python Packaging Authority про вирішення конфліктів.

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 встановлено у невалідному середовищі, яке містить одночасно Qiskit 1.0 і більш ранню версію. Характерною ознакою є встановлення дистрибутиву qiskit-terra поруч із Qiskit 1.0. Ти можеш перевірити, які дистрибутиви встановлені, запустивши pip list, але це виправити неможливо простим видаленням qiskit-terra.

На жаль, qiskit>=1.0 і qiskit-terra є конфліктуючими дистрибутивами та не можуть бути встановлені одночасно. Ще більш прикро, що ми не можемо повідомити про цей конфлікт pip через обмеження його системи метаданих.

Ця помилка найчастіше виникає в одній із двох ситуацій:

  • Ти запустив щось на кшталт pip install 'qiskit>=1' something-else, і something-else має вимогу на qiskit-terra.
  • Ти намагався запустити pip install -U qiskit у наявному середовищі.

В обох випадках немає жодної гарантії, що pip поверне тобі корисне повідомлення.

порада

Один із способів заборонити pip встановлювати qiskit-terra при виконанні окремих команд install — використовувати файл обмежень, який вимагає неможливої версії 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. Використовуючи зламане середовище, встанови pipdeptree із PyPI. Це інструмент для генерації графів залежностей:

pip install pipdeptree

Запитай у нього, які пакунки вводять залежності від qiskit-terra і qiskit (це дві окремі команди):

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-aer і qiskit-ibm-provider), та один, що досі має залежність від qiskit-terra.

порада

Цей приклад — плоска структура залежностей. У тебе може бути значно глибше дерево. Пакунки, що безпосередньо залежать від qiskit-terra (із найменшим відступом), найімовірніше є проблемними, але пакунок далі в дереві також може бути проблемним, якщо він залежить від конкретної старої версії іншого пакунку, що вже був оновлений.

Наявність залежності від qiskit-terra може означати одне з кількох:

  • Залежний пакунок є застарілим і не буде оновлений для підтримки Qiskit 1.0.

    У цьому випадку немає жодної можливості використовувати цей пакунок із Qiskit 1.0, і тобі потрібно продовжувати використовувати попередню версію Qiskit. Зазвичай це характеризується тим, що залежний пакунок має останню версію (якщо середовище нове і ти не фіксував нижчу версію) і має пряму вимогу на qiskit-terra.

  • Залежний пакунок активно підтримується, але ще не підтримує Qiskit 1.0.

    У цьому випадку тобі доведеться зачекати, поки розробники не випустять сумісну версію — будь ласка, будь терплячим! Зазвичай це характеризується тим, що встановлений дистрибутив не є останньою версією, хоча у твоїй команді встановлення версія не була вказана. Перевірити останню версію релізу дистрибутиву можна на його сторінці на https://pypi.org/.

    pip, мабуть, переглядав старі версії пакунку, доки не знайшов одну (можливо, кількамісячної або кількарічної давнини), що залежала лише від qiskit-terra.

    Саме це сталося в прикладі вище. На момент написання цього документа qiskit-dynamics==0.4.4 була останньою релізною версією.

Якщо ти збирав це середовище за допомогою кількох команд pip install (наприклад, якщо середовище старе і вже оновлювалося), спочатку спробуй встановити всі пакунки за допомогою однієї команди pip install при побудові нового середовища. Якщо проблема зберігається, принаймні один із потрібних тобі пакунків, мабуть, ще не підтримує Qiskit 1.0, а pip знаходить стару версію, що, на його думку, підійде, оскільки він не знає про конфлікт qiskit>=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, оскільки намагався обрати останні версії пакунків, хоча це не було обов'язковим. Найпростіший спосіб виправити це — створити нове віртуальне середовище, а потім запустити одну команду pip install, що містить усі необхідні пакунки плюс явний запис 'qiskit<1'. Якщо pip успішно вирішить цей граф залежностей, у тебе буде робоче віртуальне середовище. Якщо хоча б один дистрибутив вимагає Qiskit 1.0 або вище, pip має повідомити тебе про це, що буде схоже на повідомлення в розділі про невдалі резолюції.

Також можна використовувати команди pipdeptree, наведені в Створи робоче середовище для Qiskit 1.0, у межах зламаного середовища, щоб визначити, які дистрибутиви мають явну вимогу на qiskit>=1.

Я розробник, мої середовища точно правильні, але помилка все одно виникає

По-перше: ти маєш бути абсолютно впевнений, що твої середовища правильні. Перевірка, яку Qiskit використовує для визначення зламаного середовища, є досить надійною; зокрема, вона запитує importlib.metadata про інформацію про дистрибутиви встановлених пакунків і перевіряє повернуті номери версій. Сторона Qiskit 1.0 у перевірці також шукає sentinel-файли, що були присутні у старих версіях 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. Створи issue в Qiskit, пояснивши, як це сталося і чому ти впевнений, що середовище правильне, щоб ми могли це виправити.
  2. Ти можеш пригнічити виняток, встановивши змінну середовища QISKIT_SUPPRESS_1_0_IMPORT_ERROR=1. _1_0_IMPORT_ERROR=1`.

_1_0_IMPORT_ERROR=1`.