דלג לתוכן הראשי

התקנת חבילת 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 הוא מסובך מאוד ועלול לגרום לשגיאות.

הערה

הדוגמאות בסעיף זה משתמשות במודול venv שהוא חלק מהספרייה הסטנדרטית של Python. אם אתה משתמש בכלי אחר, כגון virtualenv או conda, עיין בתיעוד שלו לקבלת עזרה.

לפקודות Linux ו-macOS, נעשה שימוש בתחביר דמוי-bash. PowerShell משמש לפקודות Windows.

יצירת הסביבה החדשה

  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.

    טיפ

    דרך אחת לדרוש מ-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. אם אתה חושב שיש באג, תוכל לפתוח סוגיה עבור 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 עלולים למנוע ממך למזג PRs. לאחר שחרור מועמדי השחרור של 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 (או ממשק ה-notebook שאתה משתמש בו), ואז פתח מחדש את Jupyter.

import qiskit מצליח, אבל ניסיון לעשות משהו מחזיר "AttributeError: module 'qiskit' has no attribute '...'"

סביר שמשמעות הדבר היא שהסביבה שלך הכילה גרסה ישנה של Qiskit לצד חבילה שהרחיבה את מרחב השמות שלה (כגון גרסאות ישנות של Qiskit Aer, או ספק Qiskit IBM Q® המיושן מזמן), ואז Qiskit הוסר. הדבר הקל ביותר לעשות הוא להתחיל סביבה וירטואלית חדשה, ולהתקין רק חבילות עדכניות ולא מיושנות.

אם רק התחלת סביבה וירטואלית חדשה, או אתה בטוח שחבילות לגאסי אינן הבעיה, וודא שספריית העבודה הנוכחית שלך (הספרייה שבה הייתה שיחת ה-shell שלך כשהפעלת 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 מותקן בסביבה לא תקפה הכוללת גם את 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) הנוכחות ב-meta path שלך (ראה sys.meta_path), שנותרו מהתקנות עריכה ישנות. בפרט, בדוק בספריית העבודה שלך אם יש ספריות *.egg-info ו-*.dist-info. אם הן נמצאות בשורש של אחד מהמאגרים שלך, תוכל למחוק אותן. הדבר הגרוע ביותר שיכול לקרות הוא שתצטרך להריץ pip install -e . שוב, ואפילו זה לא סביר, כיוון שאלו בדרך כלל רק חלק מתהליך הבנייה של setuptools שלא מנוקה.

אם המידע לעיל לא עוזר לך ואתה בטוח 100% שהסביבה שלך תקינה (או שאתה מנסה בכוונה לבדוק סביבה שבורה):

  1. צור סוגיה ב-Qiskit המסבירה כיצד זה קרה ומדוע אתה בטוח שהסביבה נכונה כדי שנוכל לתקן זאת.
  2. תוכל לדכא את החריגה על ידי הגדרת משתנה הסביבה QISKIT_SUPPRESS_1_0_IMPORT_ERROR=1.