התקנת חבילת Qiskit v1.0 החדשה
Qiskit v1.0 משתמש במבנה אריזה שונה מגרסאות Qiskit הקודמות, וסביר שיגרום לבעיות בסביבות שמשתמשות בחבילות שאינן מוכנות ל-Qiskit v1.0.
אל תנסה לשדרג סביבת Python וירטואלית קיימת ל-Qiskit v1.0 במקום.
לא נבצע שינויי אריזה שוברים דומים בעתיד. זהו אירוע חד-פעמי, עם שחרור Qiskit v1.0, כדי שסיפור האריזה שלנו יהיה קל ככל האפשר בעתיד.
מדריך זה מחולק לסעיפים הבאים. עליך לעיין רק בסעיפים הרלוונטיים אליך.
- משתמשים צריכים לקרוא את הסעיף למשתמשים.
- אם אתה מפתח או מתחזק חבילה שתלויה ב-Qiskit, קרא את הסעיף למפתחים.
- אם נתקלת בבעיות בהתקנה או ייבוא של Qiskit v1.0, ראה בסעיף פתרון בעיות.
אם אתה מעוניין להבין את מבנה החבילה הישן ומדוע הוא השתנה, ראה בסקירה של שינויי האריזה השוברים.
למשתמשים
עליך להתחיל סביבה וירטואלית חדשה כדי להתקין את Qiskit v1.0. שדרוג התקנה קיימת במקום ל-Qiskit v1.0 הוא מסובך מאוד ועלול לגרום לשגיאות.
הדוגמאות בסעיף זה משתמשות במודול venv שהוא חלק מהספרייה הסטנדרטית של Python.
אם אתה משתמש בכלי אחר, כגון virtualenv או conda, ראה בתיעוד שלו לקבלת עזרה.
לפקודות Linux ו-macOS, נעשה שימוש בתחביר דמוי-bash. PowerShell משמש לפקודות Windows.
יצירת הסביבה החדשה
-
צור סביבה וירטואלית חדשה בכל ספריית פרויקט שאתה עובד בה, תוך שימוש בגרסת Python 3.8 או מאוחרת יותר לפי בחירתך.
- macOS
- Linux
- Windows
python3 -m venv .venvpython3 -m venv .venvpython -m venv .venv
-
הפעל את הסביבה.
- macOS
- Linux
- Windows
source .venv/bin/activatesource .venv/bin/activate.venv\Scripts\activate.ps1 -
התקן חבילות לפי הצורך. עליך לעשות זאת על ידי שימוש בפקודת
pip installאחת בלבד עם כל התלויות.pip install 'qiskit>=1'אתה יכול לכלול חבילות נוספות כארגומנטים באופן אופציונלי. לדוגמה:
pip install 'qiskit>=1' jupyterlab pandas matplotlibQiskit v1.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 v1.0 בסביבה וירטואלית זו. אם עליך להשתמש בחבילות כאלה, התקן אותן בסביבה וירטואלית נפרדת עם Qiskit 0.45 או 0.46.
אם יש לך סביבה קיימת, תוכל להשתמש ב-
pipdeptreeכדי לשאול את דרישות החבילות המותקנות שלך ולראות אם הן דורשותqiskit<1. לכל חבילה שדורשתqiskit<1, בדוק אם קיימים עדכונים שהופכים אותה תואמת ל-Qiskit v1.0.אם נתקלת בבעיות, ראה בסעיף פתרון בעיות, או שאל ב-Qiskit Slack. אם אתה חושב שיש באג, תוכל לפתוח סוגיה עבור Qiskit.
-
אם אינך מתכנן להשתמש בסביבה מיד, השתמש בפקודה
deactivateכדי לצאת ממנה.
שימוש בסביבה החדשה
בכל פעם שאתה מתחיל סשן שורת פקודה חדש, עליך לנווט לספריית הפרויקט שלך ו"להפעיל" את הסביבה על ידי הרצת פקודת activate:
- macOS
- Linux
- Windows
source .venv/bin/activate
source .venv/bin/activate
.venv\Scripts\activate.ps1
למפתחים
אם אתה מתחזק חבילה שתלויה ב-Qiskit, השתמש במידע זה כדי ללמוד כיצד לבטא נכון את התאימות שלך ולבדוק מול Qiskit v1.0.
המלצות לדרישות
אנחנו ממליצים שהחבילה שלך תדרוש qiskit>=0.45,<1 (או גבול תחתון מתאים אחר) אם אינך בטוח האם החבילה תואמת ל-Qiskit v1.0.
זוהי אותה המלצה הנעשית לתאימות NumPy 2.0.
מועמד לשחרור של Qiskit v1.0, גרסה 1.0.0rc1, יושחרר ב-1 בפברואר 2024. עליך לבדוק את החבילה שלך מולו, ובהקדם האפשרי, לשחרר גרסה חדשה (תואמת) של החבילה שלך עם דרישת הגג שלה ללא הגבלה.
המלצות לבדיקה מול Qiskit v1.0
המלצות אלו חלות על בדיקה יזומה מול ענף main של Qiskit, ועל בדיקה מול מועמד השחרור v1.0.0rc1 (ומאוחר יותר, אם רלוונטי).
אנחנו לא ממליצים בתחילה להגן על ענפים בהצלחת CI מול ענף main של Qiskit, כיוון ששינויים ב-Qiskit עלולים למנוע ממך למזג PRs.
לאחר שחרור מועמדי השחרור של Qiskit, ולאחר שכל התלויות של החבילה שלך תומכות ב-Qiskit v1.0, אנחנו כן ממליצים להגן על ענפים בהצלחה מול מועמד השחרור האחרון, כדי להבטיח שהחבילה נשארת תואמת ל-Qiskit v1.0.
אם ל א לחבילה שלך ולא לאף אחת מהתלויות הטרנזיטיביות שלה יש הגבלת דרישה על qiskit<1, עליך ליצור סביבת בדיקה וירטואלית כרגיל, בפקודת pip install אחת, ולציין ישירות qiskit==1.0.0rc1 או qiskit==git+https://github.com/Qiskit/qiskit.git@main לפי הצורך.
זוהי הדרך האמינה ביותר להבטיח שיש לך סביבה תקפה לחלוטין.
אם הרכיב היחיד בגרף התלויות של החבילה שלך שיש לו הגבלת דרישה על qiskit<1 הוא החבילה שלך עצמה, ייתכן שתרצה שערכת ה-CI שלך תתקן תחילה באופן זמני את קובץ הדרישות שלך כדי לאפשר את Qiskit v1.0, ואז תתקין את הסביבה בשלב אחד כמקודם.
לחלופין, השתמש בכללים הבאים לשדרוגי סביבה כלליים, אך עבור לפתרון סביבה יחידה בהקדם האפשרי.
אם לפחות אחת מהתלויות הטרנזיטיביות שלך עדיין אין לה גרסת שחרור שמאפשרת תמיכה ב-Qiskit v1.0, עליך לבצע שינויים ידניים. ישנן מספר אסטרטגיות לנסות, בסדר עדיפות משוער (מהעדיף ביותר לפחות):
- התקן את התלות הבעייתית מענף
mainשלה, אם גרסת הפיתוח שלה הרגיעה את ההגבלה, כך שתוכל לבנות את סביבת הבדיקה בשלב אחד. - הדר את השימוש בתלות זו מסביבת הבדיקה, אם אפשרי.
- צור סביבת בדיקה באותה דרך שהיית עושה בדרך כלל, ואז עקוף אותה ידנית לשימוש ב-Qiskit v1.0.
שדרוג ידני של סביבה קיימת
תהליך זה יוצר במכוון סביבה לא תקפה. לכן, כל בדיקה שמשתמשת בה פחות תקפה. בדיקות עלולות להראות כעוברות, אך זה לא מבטיח שהחבילה תואמת ל-Qiskit v1.0. זה יכול לקרות כיוון שהסביבה אינה עקבית עם עצמה ועלולה להכיל קבצים שאינם קיימים בסביבה תקפה, או שההתנהגות של חבילה שנעקפה עלולה להשתנות עם Qiskit v1.0.
אם אחת מהתלויות שלך מגבילה qiskit<1 אפילו בענף הפיתוח שלה, ייתכן שהיא לא תעבוד בשום אופן עם Qiskit v1.0, ואם הבדיקות שלך לא יכולות לרוץ בגלל זה, ייתכן שתצטרך לחכות שהם (או לעבוד איתם) יהפכו תואמים.
כדי לשדרג סביבה במקום, בצע את הצעדים הבאים:
-
צור סביבה כרגיל, וודא שאין חבילות שמרחיבות את מרחב השמות
qiskitאוqiskit.providersמותקנות. -
הסר את ההתקנה של
qiskitוגםqiskit-terraכדי להבטיח שאף אחד מהם אינו נוכח:
pip uninstall --yes qiskit qiskit-terra
בשלב זה, site-packages של הסביבה לא צריך להכיל ספריית qiskit. אינך צריך לאמת זאת בכל ריצת CI, אך אם אתה מאבחן סקריפט באופן מקומי, בצע את השלבים הבאים לאימות:
- הרץ את הפקודה הבאה מתוך ה-
pythonשל הסביבה הוירטואלית:
import site
print(site.getsitepackages())
-
אמת שהספריות האלה אינן מכילות ספריית
qiskit. אם כן, כנראה שיש לך חבילות המרחיבות מרחב שמות מותקנות, ועליך למצוא אותן ולהסיר את התלות. -
התקן את גרסת היעד של Qiskit v1.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 v1.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 v1.0 והרצת pytest (או כל שלבי הבדיקה שאתה צריך).
אם שום דבר לא מונע מ-Qiskit v1.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 v1.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 v1.0, הסיבה לכך היא שאחת ההפצות שאתה מנסה להתקין מכילה דרישה כמו qiskit<1.0.
משמעות הדבר היא שמפתחי ההפצה סימנו אותה כלא (עדיין) תואמת ל-Qiskit v1.0.
תוכל (בנימוס) לשאול את המפתחים הללו מתי ישחררו גרסה חדשה של החבילה שלהם התואמת ל-Qiskit v1.0, אבל תחילה בדוק שאין להם סוגיה פתוחה או בקשת משיכה המבקשת זאת בכל מקום שהם מקבלים תגובות. שים לב שזה לוקח זמן; תן למפתחים כחודש לקראת גרסאות חדשות של ההפצות שלהם! עד אז, לא ניתן להתקין את ההפצה הזו לצד Qiskit v1.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 v1.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 v1.0 וגם גרסה קודמת.
מאפיין זה הוא שהפצת qiskit-terra מותקנת לצד Qiskit v1.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 v1.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 v1.0 (qiskit-aer ו-qiskit-ibm-provider), ואחת שעדיין יש לה תלות על qiskit-terra.
דוגמה זו היא מבנה תלות שטוח.
ייתכן שתראה עץ עמוק הרבה יותר מזה.
החבילות שתלויות ישירות ב-qiskit-terra (הכנסה הנמוכה ביותר) הן הסבירות ביותר להיות הבעייתיות, אך אחת רחוקה יותר בעץ יכולה להיות בעייתית אם היא תלויה בגרסה ישנה ספציפית של חבילה אחרת שכבר עודכנה.
ראיית תלות על qiskit-terra יכולה לאמר אחד מכמה דברים:
-
התלות היא חבילה ישנה, ולא תתעדכן לתמיכה ב-Qiskit v1.0.
במקרה זה, אין סיכוי להשתמש בחבילה עם Qiskit v1.0, ותצטרך להמשיך להשתמש בגרסה קודמת של Qiskit. בדרך כלל זה מאופיין על ידי התלות שנמצאת בגרסתה האחרונה (בהנחה שהסביבה חדשה ולא הגבלת אותה נמוך יותר) ויש לה דרישה ישירה על
qiskit-terra. -
התלות היא חבילה שמתוחזקת באופן פעיל, אך עדיין אינה תומכת ב-Qiskit v1.0.
במקרה זה, תצטרך לחכות למפתחים לשחרר גרסה תואמת - היה סבלני! בדרך כלל זה מאופיין על ידי ההפצה המותקנת שאינה בגרסתה האחרונה, למרות שפקודת ההתקנה שלך לא ציינה גרסה. תוכל לבדוק את גרסת השחרור האחרונה של ההפצה על ידי מציאת הדף שלה ב-https://pypi.org/.
pipכנראה חיפש גרסאות ישנות של החבילה עד שמצא אחת (אולי מלפני חודשים או שנים) שהייתה תלויה רק ב-qiskit-terra.זה מה שקרה בדוגמה לעיל. בזמן יצירת מסמך זה,
qiskit-dynamics==0.4.4הייתה גרסת השחרור האחרונה.
אם בנית סביבה זו ממספר פקודות pip install (כגון אם הסביבה ישנה ועודכנה), נסה תחילה להתקין את כל החבילות שלך באמצעות פקודת pip install אחת כשאתה בונה סביבה חדשה.
אם הבעיה נמשכת, לפחות אחת מהחבילות שאתה רוצה כנראה עדיין לא תומכת ב-Qiskit v1.0, ו-pip מוצא גרסה ישנה שהוא מאמין שתעבוד כיוון שהוא לא יודע על הקונפליקט qiskit>=1/qiskit-terra.
במקום זאת, השתמש בפקודות pipdeptree כדי לזהות אילו תלויות עדיין לא תומכות ב-Qiskit v1.0.
אל תכלול חבילות שעדיין לא תומכות ב-Qiskit v1.0 בעת בנייה של סביבת Qiskit v1.0, או המשך להשתמש בגרסה קודמת של Qiskit.
ראה יצירת הסביבה החדשה להוראות.
הדוגמה בסעיף זה נוצרה לפני שחרור Qiskit v1.0.
ההפצה ה"ישנה" בשאלה (qiskit-dynamics) התנהגה נכון; לא היה ידוע שהיא תומכת ב-Qiskit v1.0 עדיין, כך שסימנה זאת בדרישותיה.
לא ניתן לתארך שינויי דרישות לאחור לגרסאות שכבר שוחררו, ו-pip יחפש רחוק כרצונו כדי למצוא משהו שעובד בעת בניית סביבה.
יצירת סביבה עובדת ל-Qiskit 0.45 או 0.46
אם יש לך סביבה שבורה לאחר ניסיון להתקין את Qiskit 0.45 או 0.46, המצב הסביר ביותר הוא ש-pip התקין את Qiskit v1.0 כיוון שניסה לבחור את הגרסאות האחרונות של החבילות, למרות שלא נדרש.
הדרך הקלה ביותר לתקן זאת היא ליצור סביבה וירטואלית חדשה, ואז להריץ פקודת pip install אחת הכוללת את כל החבילות הדרושות לך, בתוספת ערך 'qiskit<1' מפורש.
אם pip פותר בהצלחה את גרף התלויות הזה, אמורה להיות לך סביבה וירטואלית עובדת.
אם לפחות הפצה אחת דורשת Qiskit v1.0 או גדול יותר, pip אמור לתת לך הודעת שגיאה המסבירה זאת, שנראית כמו זו בסעיף על כשלי פתרון.
תוכל גם להשתמש בפקודות pipdeptree המפורטות ביצירת סביבה עובדת ל-Qiskit v1.0 מתוך הסביבה השבורה כדי לקבוע אילו הפצות יש להן דרישה מפורשת על qiskit>=1.
אני מפתח, הסביבות שלי בוודאות נכונות, ועדיין מקבל את השגיאה
ראשית: עליך להיות בטוח לחלוטין שהסביבות שלך נכונות.
הבדיקה ש-Qiskit משתמש בה כדי לקבוע סביבה שבורה היא חזקה למדי; ספציפית, היא שואלת את importlib.metadata על מידע הפצה לגבי חבילות מותקנות ובודקת את מ ספרי הגרסאות המוחזרים.
צד ה-Qiskit v1.0 של הבדיקה גם בודק קבצי sentinel שהיו נוכחים בגרסאות Qiskit ישנות ולא ב-Qiskit v1.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% שהסביבה שלך תקינה (או שאתה מנסה בכוונה לבדוק סביבה שבורה):
- צור סוגיה ב-Qiskit המסבירה כיצד זה קרה ומדוע אתה בטוח שהסביבה נכונה כדי שנוכל לתקן זאת.
- תוכל לדכא את החריגה על ידי הגדרת משתנה הסביבה
QISKIT_SUPPRESS_1_0_IMPORT_ERROR=1.