تخطَّ إلى المحتوى

الوحدات في Python: import و pip والمكتبات الخارجية

الدرس 18 من 25 · Python

لا أحد يكتب كل شيء من الصفر. المبرمج المحترف يعتمد على كود جاهز ومجرَّب كتبه غيره، ويركّز هو على فكرة برنامجه. في هذا الدرس ستتعلم كيف تستدعي الوحدات (Modules) الجاهزة في Python، وكيف تصنع وحدتك الخاصة، وكيف تثبّت مكتبات من الإنترنت بأداة pip.

الوحدة ببساطة ملف Python فيه دوال ومتغيرات جاهزة للاستخدام. تخيّل مطبخاً فيه أدراج كثيرة: درج للسكاكين، ودرج للملاعق. أنت لا تخرج كل الأدوات على الطاولة، بل تفتح الدرج الذي تحتاجه فقط. والكلمة import هي التي تفتح الدرج:

import math
print(math.sqrt(49))
print(math.pi)
print(math.floor(7.9))
print(math.ceil(7.1))
الناتج
7.0
3.141592653589793
7
8

بعد import math نصل إلى أي شيء داخل الوحدة بكتابة اسمها ثم نقطة ثم اسم الدالة. هنا sqrt تحسب الجذر التربيعي، و floor تقرّب إلى الأسفل، و ceil تقرّب إلى الأعلى.

Python تأتي ومعها مجموعة كبيرة من الوحدات تسمى المكتبة القياسية (Standard Library)، وقد استخدمت منها random في مشروع لعبة التخمين.

إذا كنت تحتاج دالة أو اثنتين فقط، استوردهما بالاسم بالصيغة from ... import، وعندها تستخدمهما مباشرة دون اسم الوحدة:

from math import sqrt, pi
print(sqrt(81))
print(round(pi, 2))
الناتج
9.0
3.14

وإذا كان اسم الوحدة طويلاً، أعطها اسماً مختصراً بالكلمة as:

import statistics as st
grades = [70, 85, 90, 85, 100]
print(st.mean(grades))
print(st.median(grades))
print(st.mode(grades))
الناتج
86
85
85

الوحدة statistics فيها دوال إحصائية: mean للمتوسط، و median للقيمة الوسطى، و mode للقيمة الأكثر تكراراً.

عندما يكبر برنامجك، لا تضع كل الكود في ملف واحد. قسّمه إلى ملفات، كل ملف مسؤول عن مهمة. وأي ملف .py تكتبه هو وحدة يمكن استيرادها! أنشئ ملفاً اسمه shapes.py:

shapes.py
def rectangle_area(width, height):
return width * height
def circle_area(radius):
return 3.14159 * radius ** 2

ثم أنشئ في المجلد نفسه ملفاً آخر اسمه main.py يستورده:

main.py
import shapes
print(shapes.rectangle_area(4, 5))
print(shapes.circle_area(2))
الناتج
20
12.56636

لاحظ أننا كتبنا import shapes بدون الامتداد .py. وعند تشغيل main.py تبحث Python عن shapes.py في المجلد نفسه أولاً.

كثيراً ما سترى هذا الشرط في آخر ملفات Python:

shapes.py
def rectangle_area(width, height):
return width * height
if __name__ == "__main__":
print("تجربة:", rectangle_area(2, 3))

المتغير __name__ تضبطه Python تلقائياً: تكون قيمته "__main__" إذا شغّلت الملف مباشرة، وتكون اسم الوحدة إذا استورده ملف آخر. فالكود داخل هذا الشرط يعمل عندما تشغّل shapes.py نفسه لتجربته، ولا يعمل عندما يستورده main.py. بهذه الطريقة يصلح الملف الواحد للأمرين.

المكتبة القياسية كبيرة، لكن العالم أكبر. على موقع PyPI (وعنوانه pypi.org) مئات الآلاف من المكتبات المجانية التي كتبها مبرمجون من كل أنحاء العالم: لتحليل البيانات، وبناء المواقع، والألعاب، والذكاء الاصطناعي.

لتثبيت أي مكتبة منها نستخدم أداة اسمها pip، وهي تأتي مع Python. تخيّلها مثل متجر التطبيقات في هاتفك، لكن للمكتبات. اكتب في الطرفية (وليس داخل ملف Python):

نافذة طرفيّة
pip install requests

هذا الأمر ينزّل مكتبة requests المشهورة لجلب البيانات من الإنترنت، ويثبّتها على جهازك. وبعدها تستطيع كتابة import requests في أي برنامج.

وهذه أهم أوامر pip:

الأمر وظيفته
pip install اسم_المكتبة تثبيت مكتبة
pip install --upgrade اسم_المكتبة تحديثها لأحدث إصدار
pip uninstall اسم_المكتبة حذفها
pip list عرض كل المكتبات المثبتة
pip show اسم_المكتبة معلومات عن مكتبة مثبتة

أنشئ ملفاً اسمه greetings.py فيه دالتان: morning(name) تعيد «صباح الخير يا» ثم الاسم، و night(name) تعيد «تصبح على خير يا» ثم الاسم. ثم أنشئ main.py يستورد الوحدة ويستدعي الدالتين:

الناتج
صباح الخير يا سارة
تصبح على خير يا سارة

ثم جرّب في الطرفية الأمر pip list لترى ما هو مثبّت على جهازك.

  • تسمية ملفك باسم وحدة موجودة: إذا سمّيت ملفك random.py أو math.py فستستورد Python ملفك أنت بدلاً من الوحدة الأصلية، وتظهر أخطاء غريبة. اختر أسماء مختلفة.
  • كتابة الامتداد: import shapes.py خطأ. اكتب import shapes فقط.
  • كتابة pip install داخل ملف Python: هذا أمر للطرفية وليس كود Python، وسيعطيك SyntaxError.
  • استخدام مكتبة قبل تثبيتها: ستظهر ModuleNotFoundError، وحلها تثبيت المكتبة بـ pip.

سؤال

بعد كتابة from math import sqrt، كيف تستدعي الدالة؟

سؤال

أين تكتب الأمر pip install requests؟

  • الوحدة ملف Python فيه دوال جاهزة، ونستدعيها بـ import.
  • from وحدة import اسم تستورد أسماء محددة، و as تعطي اسماً مختصراً.
  • أي ملف .py تكتبه يمكن استيراده من ملف آخر في المجلد نفسه.
  • الشرط if __name__ == "__main__": يعمل فقط عند تشغيل الملف مباشرة.
  • pip install تثبّت مكتبات خارجية من موقع PyPI.