{getToc} $title={محتوى المقال}
في الدروس السابقة من أساسيات بايثون تعلمنا كيف نتعامل مع الملفات، ثم تعلمنا كيف نستخدم
try و except لمعالجة الأخطاء بدل أن يتوقف البرنامج فجأة.
في هذا الدرس سننتقل إلى فكرة مهمة جدًا في بايثون، وهي فكرة Modules أو الوحدات البرمجية.
ستتعلم ما معنى Module، ولماذا نستخدم الأمر import، وكيف نستفيد من مكتبات بايثون الجاهزة بدل أن نكتب كل شيء من الصفر.
الفكرة ببساطة: بدل أن تكتب كل الأدوات بنفسك، يمكنك استدعاء أدوات جاهزة في بايثون باستخدام import. {alertInfo}
ما معنى Module في Python؟
الـ Module في بايثون هو ملف يحتوي على كود جاهز يمكنك استخدامه داخل برنامجك. قد يحتوي هذا الملف على دوال، متغيرات، كائنات، أو أوامر تساعدك في تنفيذ مهام معينة.
مثلاً، بدل أن تكتب بنفسك دوال رياضية متقدمة، يمكنك استخدام مكتبة math.
وبدل أن تكتب طريقة عشوائية لاختيار رقم، يمكنك استخدام مكتبة random.
يعني الـ Module يشبه صندوق أدوات جاهز. عندما تحتاج أداة معينة، تستدعي الصندوق وتستخدم الأداة التي تريدها.
ما وظيفة import في بايثون؟
الأمر import يستخدم لاستدعاء Module داخل برنامجك حتى تستطيع استخدام الدوال أو الأدوات الموجودة فيه.
مثال بسيط:
import math
result = math.sqrt(16)
print(result)
الناتج:
4.0
في المثال السابق استدعينا مكتبة math، ثم استخدمنا الدالة sqrt() لحساب الجذر التربيعي للعدد 16.
ملاحظة مهمة: عندما تستخدمimport mathيجب أن تكتب اسم المكتبة قبل الدالة، مثلmath.sqrt(). {alertInfo}
مثال عملي على استخدام مكتبة math
مكتبة math تحتوي على أدوات رياضية كثيرة، مثل الجذر التربيعي، التقريب، الثوابت الرياضية، وغير ذلك.
import math
print(math.sqrt(25))
print(math.ceil(4.2))
print(math.floor(4.9))
الناتج:
5.0
5
4
شرح المثال:
sqrt()تحسب الجذر التربيعي.ceil()تقرب الرقم إلى الأعلى.floor()تقرب الرقم إلى الأسفل.
استخدام from import لاستدعاء جزء محدد
أحيانًا لا تحتاج إلى استدعاء المكتبة كاملة، بل تريد دالة واحدة فقط. هنا يمكنك استخدام:
from math import sqrt
print(sqrt(36))
الناتج:
6.0
لاحظ هنا أننا لم نكتب math.sqrt()، بل كتبنا sqrt() مباشرة لأننا استدعينا الدالة نفسها من المكتبة.
| الطريقة | مثال | متى تستخدمها؟ |
|---|---|---|
import math |
math.sqrt(16) |
عندما تريد استخدام أكثر من دالة من نفس المكتبة. |
from math import sqrt |
sqrt(16) |
عندما تحتاج دالة محددة فقط. |
استخدام as لتغيير اسم المكتبة
في بعض الأحيان يكون اسم المكتبة طويلًا، أو تريد اختصاره داخل الكود. هنا نستخدم as.
import math as m
print(m.sqrt(49))
الناتج:
7.0
في هذا المثال جعلنا اسم مكتبة math هو m داخل البرنامج.
نصيحة: لا تختصر أسماء المكتبات بشكل مبالغ فيه. استخدم اختصارًا واضحًا حتى يبقى الكود مفهومًا لك ولغيرك. {alertWarning}
مثال على مكتبة random
مكتبة random تستخدم لتوليد أرقام عشوائية أو اختيار عناصر بشكل عشوائي.
import random
number = random.randint(1, 10)
print(number)
هذا الكود يطبع رقمًا عشوائيًا من 1 إلى 10.
كل مرة تشغل البرنامج قد تحصل على نتيجة مختلفة.
اختيار عنصر عشوائي من قائمة
يمكنك أيضًا استخدام random.choice() لاختيار عنصر عشوائي من قائمة.
import random
names = ["Ali", "Sara", "Omar"]
winner = random.choice(names)
print(winner)
هذا المثال يختار اسمًا عشوائيًا من القائمة.
مثال صغير: برنامج قرعة بسيط
لنطبق الآن على مثال عملي بسيط. سنكتب برنامجًا يختار فائزًا عشوائيًا من قائمة أسماء.
import random
students = ["أحمد", "سارة", "محمد", "ليلى"]
winner = random.choice(students)
print("الفائز هو:", winner)
هذا النوع من الأمثلة مفيد جدًا للمبتدئ لأنه يجمع بين أكثر من فكرة تعلمناها سابقًا:
- استخدام القوائم في بايثون.
- استخدام المتغيرات.
- استخدام
import. - استخدام دالة جاهزة من مكتبة خارجية.
- طباعة النتيجة باستخدام
print().
ما الفرق بين المكتبات المدمجة والمكتبات الخارجية؟
في بايثون توجد مكتبات مدمجة تأتي مع اللغة مباشرة، وتوجد مكتبات خارجية تحتاج إلى تثبيتها قبل الاستخدام.
| النوع | المعنى | أمثلة |
|---|---|---|
| مكتبات مدمجة | تأتي مع بايثون ولا تحتاج إلى تثبيت إضافي. | math، random، datetime، os |
| مكتبات خارجية | تحتاج إلى تثبيت باستخدام أدوات مثل pip. |
requests، pandas، flask |
في هذا الدرس نركز على المكتبات المدمجة حتى تفهم فكرة import بدون الدخول في مشاكل التثبيت.
مثال على مكتبة datetime
مكتبة datetime تساعدك في التعامل مع التاريخ والوقت.
import datetime
today = datetime.date.today()
print(today)
هذا الكود يطبع تاريخ اليوم.
وقد تختلف النتيجة حسب تاريخ تشغيل البرنامج.
مثال عملي: عرض تاريخ اليوم برسالة واضحة
import datetime
today = datetime.date.today()
print("تاريخ اليوم هو:", today)
هذا المثال بسيط، لكنه يوضح كيف يمكن لمكتبة جاهزة أن تضيف ميزة مفيدة إلى برنامجك بدون كتابة تفاصيل معقدة.
هل يمكن إنشاء Module خاص بي؟
نعم، يمكنك إنشاء Module خاص بك في بايثون. أي ملف Python بامتداد .py يمكن اعتباره Module.
مثلاً، لنفترض أن لديك ملفًا اسمه:
my_tools.py
وبداخله هذا الكود:
def say_hello(name):
print("مرحبا", name)
ثم في ملف آخر داخل نفس المجلد يمكنك استدعاؤه هكذا:
import my_tools
my_tools.say_hello("أحمد")
الناتج:
مرحبا أحمد
بهذه الطريقة تستطيع تقسيم مشروعك إلى ملفات صغيرة بدل وضع كل الكود في ملف واحد كبير.
فائدة مهمة: تقسيم الكود إلى Modules يجعل المشروع أسهل في القراءة، وأسهل في التعديل، وأسهل في الصيانة. {alertSuccess}
أخطاء شائعة عند استخدام import
قد تظهر لك بعض الأخطاء عند استخدام import، خصوصًا في بداية التعلم.
| الخطأ | السبب المحتمل | الحل |
|---|---|---|
ModuleNotFoundError |
اسم المكتبة غير صحيح أو المكتبة غير مثبتة. | تأكد من كتابة الاسم بشكل صحيح، أو ثبت المكتبة إذا كانت خارجية. |
NameError |
استخدمت دالة من مكتبة بدون استدعاء المكتبة. | اكتب import قبل استخدام الدالة. |
AttributeError |
استدعيت دالة غير موجودة داخل المكتبة. | راجع اسم الدالة وتأكد من كتابته بشكل صحيح. |
مثال على خطأ بسبب نسيان import
number = random.randint(1, 10)
print(number)
هذا الكود سيسبب خطأ لأننا استخدمنا random بدون استدعائها.
الصحيح:
import random
number = random.randint(1, 10)
print(number)
هل أستخدم import في بداية الملف أم في وسط الكود؟
الأفضل غالبًا أن تضع أوامر import في بداية ملف Python، حتى يكون واضحًا من أول الكود ما هي المكتبات التي يعتمد عليها البرنامج.
مثال منظم:
import random
import datetime
name = "Ali"
number = random.randint(1, 100)
today = datetime.date.today()
print("Name:", name)
print("Random number:", number)
print("Today:", today)
أفضل ممارسات استخدام import للمبتدئين
- اكتب أوامر
importفي بداية الملف. - لا تستورد مكتبات لا تستخدمها داخل البرنامج.
- استخدم
import moduleعندما تحتاج أكثر من دالة من نفس المكتبة. - استخدم
from module import functionعندما تحتاج دالة واحدة فقط. - لا تستخدم أسماء ملفات مثل
random.pyأوmath.pyحتى لا تتعارض مع أسماء مكتبات بايثون. - عند ظهور خطأ، اقرأ اسم الخطأ بعناية قبل تعديل الكود.
تنبيه مهم: لا تسمِّ ملفك باسم مكتبة جاهزة مثلrandom.pyأوmath.py، لأن ذلك قد يسبب مشاكل عند الاستدعاء. {alertWarning}
مثال تطبيقي: برنامج اختيار تحدي عشوائي
لنكتب برنامجًا بسيطًا يختار لك تحديًا عشوائيًا من قائمة تحديات للمبتدئين.
import random
challenges = [
"اكتب برنامج يجمع رقمين",
"اكتب برنامج يحسب العمر",
"اكتب برنامج يطبع الأرقام من 1 إلى 10",
"اكتب برنامج يختار اسمًا عشوائيًا من قائمة"
]
challenge = random.choice(challenges)
print("تحدي اليوم:")
print(challenge)
هذا المثال مناسب جدًا للمراجعة لأنه يستخدم:
- قائمة
list. - مكتبة
random. - الأمر
import. - الدالة
choice(). - طباعة النصوص باستخدام
print().
روابط مفيدة من بايثون العرب
حتى تفهم هذا الدرس بشكل أفضل، أنصحك بمراجعة هذه الدروس من موقع بايثون العرب:
- كورس أساسيات بايثون للمبتدئين
- أساسيات بايثون 22: التعامل مع الملفات في Python
- أساسيات بايثون 23: شرح try و except في Python
- حل مشكلة ImportError و ModuleNotFoundError في Python
ويمكنك أيضًا الرجوع إلى توثيق بايثون الرسمي لمعرفة المزيد عن الوحدات البرمجية: Python Modules Documentation.
تمرين بسيط على الدرس
جرّب كتابة برنامج يقوم بالآتي:
- يستورد مكتبة
random. - ينشئ قائمة تحتوي على 5 أرقام.
- يختار رقمًا عشوائيًا من القائمة.
- يطبع الرقم المختار للمستخدم.
حاول تنفيذ التمرين بنفسك أولًا، ثم قارن حلك بهذا الحل:
import random
numbers = [10, 20, 30, 40, 50]
selected_number = random.choice(numbers)
print("الرقم المختار هو:", selected_number)
خلاصة الدرس
تعلمنا في هذا الدرس أن Module هو ملف أو مكتبة تحتوي على كود جاهز يمكننا استخدامه داخل برامجنا.
وتعلمنا أن الأمر import يستخدم لاستدعاء هذه المكتبات.
كما تعلمنا الفرق بين:
import modulefrom module import functionimport module as name
واستخدمنا أمثلة عملية على مكتبات مثل math و random و datetime.
الخلاصة المهمة: استخدام import يجعلك تستفيد من أدوات جاهزة في بايثون، ويوفر عليك الوقت، ويجعل برامجك أقوى وأسهل في التطوير. {alertSuccess}
أسئلة شائعة مع إجاباتها
ما معنى import في Python؟
الأمر import يستخدم لاستدعاء مكتبة أو Module داخل برنامج بايثون حتى تستطيع استخدام الدوال والأدوات الموجودة فيه.
ما الفرق بين import math و from math import sqrt؟
عند استخدام import math تستدعي المكتبة كاملة وتستخدم الدالة بهذا الشكل math.sqrt().
أما عند استخدام from math import sqrt فيمكنك استخدام sqrt() مباشرة.
هل مكتبات مثل random و math تحتاج إلى تثبيت؟
لا، مكتبات مثل random و math و datetime تأتي مدمجة مع بايثون ولا تحتاج إلى تثبيت إضافي.
لماذا يظهر خطأ ModuleNotFoundError؟
يظهر هذا الخطأ غالبًا عندما تكتب اسم المكتبة بشكل خاطئ، أو عندما تحاول استدعاء مكتبة خارجية غير مثبتة على جهازك.
هل يمكنني إنشاء Module خاص بي؟
نعم، أي ملف Python بامتداد .py يمكن استدعاؤه كـ Module من ملف آخر إذا كان في نفس المجلد أو في مسار يمكن لبايثون الوصول إليه.




