وحدة الاستيراد في Python مع الأمثلة
⚡ ملخص ذكي
استيراد في Python يُتيح ذلك لملف واحد إعادة استخدام المتغيرات والدوال والفئات المُعرّفة في ملف آخر. الوحدة النمطية هي ببساطة ملف بامتداد .py، بينما تُجمّع الحزمة الوحدات النمطية ذات الصلة داخل دليل مُحدّد بملف __init__.py.

تشرح الأقسام التالية الوحدات النمطية والحزم وأنماط الاستيراد المختلفة وكيفية عمل الاستيراد المطلق والنسبي في Python.
ما هي الوحدات في Python?
الوحدة النمطية هي ملف يحتوي على Python الكود. يمكن أن يكون الكود على شكل متغيرات أو دوال أو فئة مُعرَّفة. يصبح اسم الملف هو اسم الوحدة.
على سبيل المثال، إذا كان اسم الملف الخاص بك هو guru99.py، فسيكون اسم الوحدة هو guru99. باستخدام وظيفة الوحدة النمطية، يمكنك تقسيم التعليمات البرمجية الخاصة بك إلى ملفات مختلفة بدلاً من كتابة كل شيء داخل ملف واحد.
ما هو Python وحدة الاستيراد؟
يُعتبر الملف وحدة نمطية في Pythonلاستخدام الوحدة، يجب عليك استيرادها باستخدام استيراد الكلمة المفتاحية. يمكن استخدام الدوال أو المتغيرات الموجودة داخل الملف في ملف آخر عن طريق استيراد الوحدة. هذه الوظيفة متوفرة في لغات أخرى مثل TypeScript, Javaنص, Java، روبي ، إلخ.
كيفية إنشاء واستيراد وحدة في Python?
الآن سنقوم بإنشاء وحدة نمطية واستيرادها إلى ملف آخر.
فيما يلي خطوات إنشاء الوحدة واستيرادها كما هو موضح في لقطة الشاشة:
اتبع الخطوات الموضحة لإنشاء وحدة نمطية في Python.
بنية المجلد المستخدمة لاختبار الكود هي كما يلي:
modtest/ test.py display.py
الخطوة 1) أنشئ ملفًا وسمّه test.py
الخطوة 2) داخل test.py، قم بإنشاء وظيفة تسمى Display_message()
Def display_message():
return "Welcome to Guru99 Tutorials!"
الخطوة 3) الآن قم بإنشاء ملف Display.py آخر.
الخطوة 4) قم باستيراد ملف الوحدة النمطية test.py داخل ملف display.py، كما هو موضح أدناه:
import test
أثناء الاستيراد، ليس عليك ذكر ملف test.py ولكن فقط اسم الملف.
الخطوة 5) بعد ذلك، يمكنك استدعاء الدالة display_message() من الملف test.py داخل الملف display.py. ستحتاج إلى استخدام module_name.function_name.
على سبيل المثال test.display_message().
Import test
print(test.display_message())
الخطوة 6) عند تشغيل ملف display.py، ستحصل على ما يلي الإخراج:
Welcome to Guru99 Tutorials!
استيراد فئة في Python
لقد رأينا سابقاً وحدة نمطية بسيطة تحتوي على دالة. هنا سنقوم بإنشاء فئة والإشارة إليها داخل ملف آخر.
بنية المجلدات لاختبار الكود هي كما يلي:
myproj/ Car.py display.py
قم بإنشاء ملف يسمى Car.py بالكود التالي:
اسم الملف: Car.py
class Car: brand_name = "BMW" model = "Z4" manu_year = "2020" def __init__(self, brand_name, model, manu_year): self.brand_name = brand_name self.model = model self.manu_year = manu_year def car_details(self): print("Car brand is ", self.brand_name) print("Car model is ", self.model) print("Car manufacture year is ", self.manu_year) def get_Car_brand(self): print("Car brand is ", self.brand_name) def get_Car_model(self): print("Car model is ", self.model)
يحتوي الملف Car.py على السمات brand_name و model و manu_year. أما الدوال المعرفة داخل الفئة فهي car_details() و get_Car_brand() و get_Car_model().
دعونا الآن نستخدم الملف Car.py كوحدة نمطية في ملف آخر يسمى Display.py.
اسم الملف: Display.py
import Car car_det = Car.Car("BMW","Z5", 2020) print(car_det.brand_name) print(car_det.car_details()) print(car_det.get_Car_brand()) print(car_det.get_Car_model())
الإخراج:
BMW Car brand is BMW Car model is Z5 Car manufacture year is 2020 Car brand is BMW Car model is Z5
لذا يمكننا الوصول إلى جميع المتغيرات والوظائف من Car.py باستخدام وحدة Car.
استخدام من لاستيراد الوحدة النمطية
يمكنك استيراد جزء صغير فقط من الوحدة، أي فقط الوظائف المطلوبة وأسماء المتغيرات من الوحدة بدلاً من استيراد الكود الكامل.
عندما تريد استيراد أشياء محددة فقط، يمكنك استخدام الكلمة المفتاحية "from" لاستيراد ما تريد.
لذلك فإن بناء الجملة هو
from module import your function_name , variables,... etc.
بنية المجلد المستخدمة لاختبار الكود هي كما يلي:
modtest/ test.py display.py
يحتوي ملف test.py على دالتين كما هو موضح:
اسم الملف: test.py
defdisplay_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
الآن أنت بحاجة إلى الدالة display_message(). يمكنك الوصول مباشرةً إلى الدالة أو المتغير الذي تستورده كما هو موضح أدناه:
اسم الملف: Display.py
from test import display_message print(display_message())
الإخراج:
Welcome to Guru99 Tutorials!
أما إذا قمت باستخدام الدالة display_message1()، فستظهر لك رسالة خطأ تفيد بأن الدالة غير معرّفة كما هو موضح أدناه:
from test import display_message print(display_message1())
الإخراج:
Traceback (most recent call last): File "display.py", line 3, in <module> print(display_message1()) Name Error: name 'display_message1' is not defined
استيراد كل شيء من الوحدة
تتيح لك خاصية الاستيراد استيراد الوحدة النمطية بالكامل باستخدام الاستيراد متبوعًا باسم الوحدة النمطية، أي اسم الملف أو المكتبة المراد استخدامها.
بناء الجملة:
Import module
أو باستخدام ملفات
from module import *
بنية المجلد المستخدمة لاختبار الكود هي كما يلي:
modtest/ test.py display.py
فيما يلي تفاصيل الكود داخل test.py
my_name = "Guru99" my_address = "Mumbai" defdisplay_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
باستخدام وحدة الاستيراد
باستخدام اسم وحدة الاستيراد فقط، للإشارة إلى المتغيرات والوظائف داخل الوحدة، يجب عليك إضافة اسم الوحدة كبادئة لها.
مثال
اسم الملف: Display.py
Import test print(test.display_message()) print(test.display_message1()) print(test.my_name) print(test.my_address)
يُستخدم اسم الوحدة النمطية test للإشارة إلى الدوال والمتغيرات الموجودة داخل الوحدة النمطية test.
الإخراج:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
استخدام الاستيراد *
دعونا نرى مثالا باستخدام يستورد *. عن طريق يستورد *، يمكن الوصول إلى الوظائف والمتغيرات مباشرة، كما هو موضح في المثال أدناه:
from test import * print(display_message()) print(display_message1()) print(my_name) print(my_address)
الإخراج:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
الدالة دير ().
الدالة dir() هي دالة مدمجة في Python. تقوم الدالة dir() بإرجاع جميع الخصائص والأساليب، بما في ذلك الخصائص المضمنة للكائن المحدد.
لذلك عند استخدام الدالة dir() على الوحدة النمطية، فإنها ستعطيك المتغيرات والوظائف الموجودة داخل الوحدة النمطية.
إليك مثال عملي لاستخدام الدالة dir() في وحدة برمجية. لدينا فئة تُسمى Car.py، فلنستوردها ونُسندها إلى الدالة dir() لنرى الناتج.
ستكون بنية المجلد لاختبار الكود كما يلي:
test prop/ Car.py test.py
اسم الملف: Car.py
class Car: brand_name = "BMW" model = "Z4" manu_year = "2020" def __init__(self, brand_name, model, manu_year): self.brand_name = brand_name self.model = model self.manu_year = manu_year def car_details(self): print("Car brand is ", self.brand_name) print("Car model is ", self.model) print("Car manufacture year is ", self.manu_year) def get_Car_brand(self): print("Car brand is ", self.brand_name) def get_Car_model(self): print("Car model is ", self.model)
اسم الملف: test.py
import Car class_contents = dir(Car) print(class_contents)
يعطينا الإخراج اسم الفئة وجميع الوظائف المحددة في Car.py.
يمكنك أيضًا تجربة استخدام dir() على الوحدة النمطية المضمنة المتوفرة في Pythonلنجرب الأمر نفسه على جسون الوحدة كما هو موضح في المثال أدناه. ستعرض جميع الخصائص والأساليب المتاحة في جسون وحدة.
Import json
json_details = dir(json)
print(json_details)
الإخراج:
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__bu iltins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__pac kage__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_en coder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'loa d', 'loads', 'scanner']
الباقات
الحزمة عبارة عن دليل يحتوي على جميع الوحدات المحددة بداخله. لجعل أ Python يتعامل المفسر مع المجلد كحزمة، لذا يجب أن يحتوي مجلدك على ملف __init__.py. هذا الملف يجعل المجلد حزمة. إليك بنية الحزمة التي سنعمل عليها.
اسم الحزمة هو حزمة بلديللبدء باستخدام الحزمة، أنشئ مجلدًا باسم mypackage/. داخل هذا المجلد، أنشئ ملفًا فارغًا باسم __init__.py. أنشئ ثلاثة ملفات أخرى هي module1.py وmodule2.py وmodule3.py، وحدد الدوال كما هو موضح في لقطة الشاشة. إليك تفاصيل الملفات module1.py وmodule2.py وmodule3.py
Module1.py
def mod1_func1(): print("Welcome to Module1 function1") def mod1_func2(): print("Welcome to Module1 function2") def mod1_func3(): print("Welcome to Module1 function3")
Module2.py
def mod2_func1(): print("Welcome to Module2 function1") def mod2_func2(): print("Welcome to Module2 function2") def mod2_func3(): print("Welcome to Module2 function3")
Module3.py
def mod3_func1(): print("Welcome to Module3 function1") def mod3_func2(): print("Welcome to Module3 function2") def mod3_func3(): print("Welcome to Module3 function3")
استخدم صفقة جاهز للاستخدام. الآن، استدعِ الحزمة داخل أي من ملفاتك كما هو موضح أدناه في ملف test.py:
هنا، يتم استيراد mypackage.module1 وإعطائه اسمًا مستعارًا وزارة الدفاع 1وبالمثل، يمكنك استخدام الوحدات الأخرى module2.py و module3.py من mypackage.
import mypackage.module1 as mod1 print(mod1.mod1_func1()) print(mod1.mod1_func2()) print(mod1.mod1_func2())
الإخراج:
Welcome to Module1 function1 None Welcome to Module1 function2 None Welcome to Module1 function2 None
لقد عرضنا للتو الحزمة باستخدام وحدة بسيطة تحتوي على وظائف. وبحسب مشروعك، يمكنك أيضاً إنشاء حزم تتضمن حزماً فرعية، أي مجلدات فرعية تحتوي على وحدات مع تعريفات للفئات.
Python مسار البحث عن الوحدة النمطية
أثناء التنفيذ، عندما Python يأتي عبر اسم وحدة الاستيراديحاول المفسر تحديد موقع الوحدة. يبحث عن الوحدة في قائمة الوحدات المدمجة، ثم في جميع الدلائل المحددة داخل sys.path.
باختصار، يقوم المترجم بالبحث التالي لتحديد موقع الوحدة:
- في الدليل الحالي الخاص بك.
- في قائمة الوحدات النمطية المدمجة.
- داخل مجلدات sys.path.
يمكنك الحصول على تفاصيل sys.path عن طريق استيراد وحدة sys وطباعة sys.path. سيعرض لك ذلك قائمة بالمجلدات كما هو موضح أدناه:
importsys
print(sys.path)
الإخراج:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\ \Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\P ython37\\DLLs']
يمكنك أيضًا تعديل المسار والاحتفاظ بالأدلة وفقًا لمتطلباتك.
استخدام الاسم المستعار للوحدة النمطية في الاستيراد
يمكنك أيضًا تحويل اسم الوحدة إلى صيغة أقصر عن طريق إعطائه اسمًا بديلًا. يمكن إنشاء الاسم البديل باستخدام as الكلمة.
بناء الجملة:
import filename as alias name
ستكون بنية المجلد لاختبار الكود كما يلي:
Mod test/ test.py display.py
فيما يلي الكود الموجود داخل test.py
my_name = "Guru99" my_address = "Mumbai" def display_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
الآن سنستخدم اسمًا بديلًا لملف test.py في ملف display.py
Import test as t print(t.display_message()) print(t.display_message1()) print(t.my_name) print(t.my_address)
الاسم المستعار المستخدم لوحدة الاختبار هو t. لذلك يمكن الإشارة إلى الدوال والمتغيرات من ملف test.py باستخدام الاسم المستعار t.
الإخراج:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
الواردات المطلقة والنسبية في Python
أنت تعرف الآن كيفية استيراد ملف كوحدة نمطية داخل ملف آخر. دعونا الآن نرى كيفية إدارة الملفات المتوفرة في المجلدات. يمكن استيراد الملفات الموجودة في المجلدات إما باستخدام عمليات الاستيراد المطلقة أو النسبية.
ضع في اعتبارك أن لديك بنية مجلد المشروع الخاص بك، كما هو موضح أدناه:
المجلد الرئيسي هو myproject/. ويحتوي على مجلدين فرعيين هما package1 و package2.
يحتوي المجلد package1 على وحدتين، module1.py و module2.py.
يحتوي المجلد package2 على فئة واحدة myclass.py، وحزمة فرعية فرعية تحتوي على Module3.py، وأخيرة Module4.py.
- يوجد في الملف module1.py دالة تسمى myfunc1.
- يوجد في الملف module2.py دالة تسمى myfunc2.
- يوجد في الملف module3.py دالة تسمى myfunc3.
- يوجد في الملف module4.py دالة تسمى myfunc4.
استخدام الواردات المطلقة
بالنسبة لعمليات الاستيراد المطلقة، تحتاج إلى إضافة المسار الكامل لوحدتك مباشرة من مجلد جذر المشروع.
دعونا الآن نرى كيفية استخدام عمليات الاستيراد المطلقة للإشارة إلى الوظائف الموجودة في كل وحدة من الوحدات.
لاستخدام الدالة myfunc1، ستحتاج إلى استيرادها على النحو التالي:
from package1.module1 import myfunc1 or from package1 import module1 module1.myfunc1()
لاستخدام الدالة myfunc3، ستحتاج إلى استيرادها على النحو التالي:
from package1.subpkg.module3 import myfunc3 or from package1.subpkg import module3 module3.myfunc3()
مزايا وعيوب استخدام الواردات المطلقة
فيما يلي مزايا استخدام الواردات المطلقة:
- يصبح من السهل tracأعد الوحدات النمطية لفحص الكود.
- سهل الاستخدام ومباشر للغاية.
- إذا تم نقل المشروع إلى مسار مختلف، فستظل عمليات الاستيراد كما هي.
عيوب استخدام الواردات المطلقة
فيما يلي عيوب استخدام الاستيراد المطلق:
- قد يصبح مسار الاستيراد طويلاً جداً في حالة تداخل الوحدات النمطية وطول أسماء الوحدات النمطية.
استخدام الواردات النسبية
بالنظر إلى بنية المجلدات نفسها المذكورة أعلاه، سنرى كيفية استيرادها باستخدام عمليات الاستيراد النسبية.
في الاستيراد النسبي، تكون الوحدة المراد استيرادها نسبية للموقع الحالي، أي الموقع الذي توجد فيه عبارة الاستيراد.
بناء الجملة
في عمليات الاستيراد النسبية، تحتاج إلى إضافة نقطة (.) قبل اسم الوحدة عند الاستيراد باستخدام من.
ستكون هناك نقطتان (..) قبل اسم الوحدة إذا كانت الوحدة على مستوى أعلى من الموقع الحالي.
بالرجوع إلى شكل بنية المجلد المذكور أعلاه، لدينا الوحدات التالية مع وظائفها، والتي نحتاج إلى الرجوع إليها.
- يوجد في الملف module1.py دالة تسمى myfunc1.
- يوجد في الملف module2.py دالة تسمى myfunc2.
- يوجد في الملف module3.py دالة تسمى myfunc3.
- يوجد في الملف module4.py دالة تسمى myfunc4.
لاستخدام الدالة myfunc1، ستحتاج إلى استيرادها على النحو التالي:
from .module1 import myfunc1
لاستخدام الدالة myfunc3، ستحتاج إلى استيرادها على النحو التالي:
from .subpkg.module3 import myfunc3
مزايا الواردات النسبية
- من السهل العمل مع الواردات النسبية.
- من الموقع الحالي، يمكن اختصار الواردات مقارنة بالواردات المطلقة.
مساوئ الواردات النسبية
- باستخدام الاستيراد النسبي، يصبح من الصعب trace back where the code is exist.



