בשבוע שעבר עשינו את צעדינו הראשונים בעולם המודולים.
למדנו את הרעיון העומד מאחוריהם, כיצד לייבא אותם, איפה למצוא עליהם מידע וכיצד להשתמש בהם.
השתמשנו במודולים שמגיעים עם פייתון, כמו math, random או datetime, ופתרנו בעזרתם בעיות מורכבות.
ישנם יתרונות רבים לשימוש במודולים המובנים בפייתון:
הם מקלים עלינו בפתרון בעיות מורכבות, מכסים מקרי קצה רבים ומתוחזקים היטב.
מעבר לכך, השימוש בהם נפוץ מאוד בקהילת מפתחי הפייתון, ולכן התמיכה בהם ברשת רחבה.
רשימת המודולים שמגיעים עם פייתון נמצאת באתר התיעוד הרשמי של פייתון, וכל מודול ברשימה מתועד לעילא ולעילא.
אך ישנם גם חסרונות למודולים המובנים בפייתון:
הם לא מתיימרים לפתור בעיות איזוטריות, כמו קריאת חדשות או פתירת קוביות הונגריות.
יתרה מזאת, המודולים מתעדכנים לעיתים רחוקות, חלקם מפגרים אחר קצב החידושים בעולם,
ועבור חלקם הקהילה מפתחת אלטרנטיבה טובה יותר.
בפרק זה נלמד על מודולים שנוצרו על ידי צד שלישי – מתכנתים כמוכם.
לאורך המחברת הזו נבין איך מוצאים אותם, איך מתקינים אותם ואיך משתמשים בהם.
בדרך כלל המסע שלנו יתחיל כאשר ניתקל בבעיה שגורמת לנו לשבור את הראש –
מאחר שהיא מורכבת מאוד או שיש לה מקרי קצה רבים מאוד.
זו גם יכולה להיות בעיה שכנראה כבר פתרו בעבר ושייקח לנו זמן לממש בעצמנו.
נניח שאנחנו בונים פרויקט קטן משלנו – מילון אינטרנטי שמציג למשתמש את פירוש המילה שהוא מקליד.
אנחנו רוצים שכשמחפשים מילה במילון שלנו – אחת התוצאות תהיה תקציר מוויקיפדיה.
כרגע אין לנו די ידע כדי לממש שליפת מידע מוויקיפדיה, אבל אין סיבה שזה ירתיע אותנו!
המקום הראשון שנפנה אליו הוא מנוע החיפוש המועדף עליכם.
נחפש מודול שמתעסק בוויקיפדיה: python module wikipedia
, וננסה לקבל מושג על מודולים שעשויים לעזור לנו:
הקישור הראשון שהתקבל בתוצאות החיפוש מוביל אותנו לאתר שנקרא PyPI, או בשמו המלא – Python Package Index.
זהו האתר הרשמי של פייתון לאחסון חבילות (שאנחנו מכירים כ"מודולים") – מאגר גדול שבו חבילות מכל סוג וצורה.
בבסיסו, PyPI הוא מקום ריכוזי שאליו משתמשים יכולים להעלות חבילות שיצרו, וממנו ציבור המתכנתים יכול להוריד חבילות ולהשתמש בהן.
נכון לכתיבת מילים אלו, ל־PyPI הועלו יותר מ־235,000 חבילות.
ישנו הבדל בין משמעות המונח "חבילה" (Package) לבין משמעות המונח "מודול" (Module).
נסביר את ההבדל בין המילים באחד השבועות הבאים. עד אז – נתייחס אליהן כאל מילים נרדפות.
נכנס לקישור שהופיע בתוצאות החיפוש, ונביט על דף המודול wikipedia באתר PyPI:
במרכז האתר נוכל לראות פירוט קצר על החבילה, ולעיתים יופיעו הוראות התקנה ודוגמאות קוד המדריכות כיצד לעבוד איתה.
מדובר במידע שימושי שכדאי לעיין בו –
פעמים רבות נמצא בו קישורים רלוונטיים, או דוגמאות שנותנות מושג על נוחות השימוש בחבילה לצורכנו.
בצד ימין למעלה נוכל למצוא את תאריך העדכון האחרון של החבילה – במקרה שלנו, לפני 6 שנים, ב־2014.
מדובר בתאריך ישן וברור שהחבילה אינה מתוחזקת.
נעדיף שלא לבחור חבילות כאלו לצורכי פרויקטים גדולים שאנחנו מתכוונים לתחזק לאורך זמן.
לרוב נעדיף חבילות עם סביבת תמיכה כמה שיותר מבוססת, וכאלו שעבורן משוחררים תיקונים ועדכונים שיוצאים תדיר.
בצד שמאל נוכל לראות נתונים שמעידים, בין היתר, על הפופולריות של הפרויקט.
מדד הכוכבים הוא למעשה כמות ה"לייקים" שהפרויקט קיבל בפלטפורמה לניהול קוד בשם GitHub.
לרוב נעדיף לבחור בספריות שצברו כמה מאות כוכבים. לזו יש כמעט 2,000, מספר לא רע בכלל.
המודול הזה נראה טוב דיו לצורכנו, והחלטנו להשתמש בו.
אם ננסה לייבא אותו, נקבל שגיאה:
In [ ]:
import wikipedia
זה מובן. פייתון מן הסתם לא יכולה להגיע עם כל ה־235,000 מודולים שפרסמה הקהילה.
אם כך, נצטרך לבחור אילו מודולים אנחנו רוצים להתקין, ולהתקין אותם לפני שנוכל להשתמש בהם.
תהליך ההתקנה הוא לרוב פשוט ולא דורש מאמץ רב.
פייתון מגיעה עם כלי שנקרא pip, שמשמש להתקנה של חבילות חיצוניות ולניהולן.
כדי להשתמש בו, פתחו את שורת הפקודה במחשב שלכם.
כדי לפתוח את שורת הפקודה במערכת ההפעלה חלונות, לחצו על ⊞ WinKey+R במקלדת.
הלחצן ⊞ WinKey מופיע בין כפתור ה־ALT לכפתור ה־CTRL בצד השמאלי התחתון של המקלדת.
בחלון הקטן שייפתח לכם, הקישו cmd
ולחצו ⏎ Enter.
בשלב זה אמור להופיע לכם על המסך חלון שחור. זוהי שורת הפקודה.
כדי לפתוח את שורת הפקודה במערכת Mac, לחצו על cmd ⌘+Space במקלדת.
בחלון שייפתח לכם, הקישו Terminal
. התוכנה Terminal אמורה להופיע לכם כעת תחת המילים Top Hit.
לחצו לחיצה כפולה על Terminal.
בשלב זה אמור להופיע לכם על המסך חלון לבן. זוהי שורת הפקודה.
עכשיו, כששורת הפקודה פתוחה, נוכל להתקין את החבילה wikipedia.
נכתוב בשורת הפקודה: pip install wikipedia, ונראה את pip מתקין עבורנו את החבילה.
פקודת ההתקנה מופיעה בראש הדף של החבילה באתר PyPI, ולרוב גם בתיעוד החבילה עצמו.
אפשר להריץ פקודה בשורת הפקודה מהמחברת. פתחו תא קוד חדש, והדביקו את הפקודה כשלפניה סימן קריאה.
לדוגמה, כדי להתקין את החבילה, השתמשו ב־!pip install wikipedia
זה הזמן להתחיל לעבוד עם החבילה.
בשלב הזה כדאי לפתוח את תיעוד החבילה ולנסות להריץ משם דברים כדי לקבל תחושה כללית בנוגע לטיבה.
חיפוש זריז בגוגל של python wikipedia module documentation
יחזיר לנו את התוצאה הרביעית מהחיפוש הקודם שלנו בגוגל.
ניכנס ונריץ את שורות הקוד לדוגמה המופיעות בתיעוד:
In [ ]:
import wikipedia
wikipedia.summary('Wikipedia')
יופי! כבר עכשיו אפשר להגיד שהצלחנו במשימה שלנו לאחזר את פסקת הסיכום מוויקיפדיה לפי ערך מילוני.
לאן ממשיכים מכאן?
נשוטט קצת בתיעוד של החבילה כדי להבין מה עוד היא יכולה לעשות.
נראה, לדוגמה, שאפשר לחפש ערכים גם בעברית!
In [ ]:
import wikipedia
wikipedia.set_lang("he")
wikipedia.summary("ויקיפדיה")
מצאו אילו נקודות עניין יש ברדיוס של עד 600 מטר מהנקודה שהקואורדינטות שלה הן: קו רוחב 29.979167 וקו אורך 31.134167.
השתמשו בחבילה wikipedia ובתיעוד שלה.
אם אתם אמיצים במיוחד ומרגישים ברי־מזל, תוכלו לכתוב את שם החבילה, נקודה, ואז ללחוץ על Tab ↹ במקלדת.
התוצאה תהיה רשימת הפעולות הקיימות בחבילה, מסודרת לפי סדר מילוני.
קל מאוד ללכת לאיבוד בצורה הזו.
פעמים רבות תראו לצד הפעולות גם משתנים פנימיים שבהם החבילה עושה שימוש,
והסידור האלפבתי לא מקל על מציאת פונקציות שבהן אנחנו רוצים להשתמש.
כשמתאפשר, נעדיף להשתמש בתיעוד שכתב המפתח.
pip מאפשרת לנו לנהל את כל חבילות הפייתון שמותקנות על המחשב שלנו.
נסקור כמה פקודות שכדאי להכיר:
pip install
pip uninstall
pip show
pip search
pip list
במחברת זו למדנו כיצד מוצאים, מתקינים ומשתמשים במודול שכתבו מפתחי פייתון אחרים.
היכולת למצוא קטעי קוד שכתבו מתכנתים אחרים ולהשתמש בהם, היא אחד הכלים החשובים ביותר עבור כל מתכנת.
ככל שתשתמשו יותר בחבילות חיצוניות, כך יתפתחו יכולותיכם הקשורות במציאה של מודולים חדשים ובתפעולם.
הקפידו לזכור שלרוב קיים פתרון לכל בעיה שנתקלתם בה, והרבו להשתמש בחבילות חיצוניות כדי לפתור בעיות.
מצאו במחשבכם חבילה אחת ששמה כשם של חיה, חבילה אחת ששמה כשם של מספר וחבילה אחת ששמה כשם של יצור מתולוגי.
בחרו באחת מהן והסבירו במשפט אחד מה היא עושה.
שימו לב: אפשר להתעלם מהערות הבודק האוטומטי.
כתבו פונקציה בשם create_people שמקבלת מספר ($n$) ומחזירה $n$ פרטי אנשים מזויפים.
"איש" מוגדר כצירוף הפרטים של שם מלא, כתובת, כתובת דואר אלקטרוני ומספר טלפון.
בחרו בעצמכם את מבני הנתונים שבהם כדאי לעשות שימוש בתרגיל זה.
הצילו! טרוריסט משוגע מנסה לבצע פיגוע, ויכולות הפייתון שלכם הן היחידות שיכולות לעזור!
מאמצי מודיעין נרחבים הביאו אותנו למסקנה שהטרוריסט מצפין את מסריו בתמונות כך:
בכל עמודה בתמונה ישנו פיקסל אחד שצבוע בשחור.
הפיקסל צבוע במספר השורה שתואם את הערך המספרי של התו (ראו תיעוד על הפונקציות ord, chr).
אם ממירים את המיקום שבו נמצאים הפיקסלים השחורים לפי סדר, משמאל לימין, מקבלים את המסר המוכמן.
לדוגמה, אם בתמונה בגודל (2, 255) הפיקסל השמאלי נמצא בשורה מספר 72 והפיקסל הימני נמצא בשורה מספר 105, המסר המוכמן הוא "Hi".
כתבו פונקציה שמקבלת נתיב לקובץ המוצפן ומחזירה את המסר המוצפן בו.
השתמשו בקובץ resources/code.png כדי לפענח את המסר של הטרוריסט!