Skip to content

2. إعداد بيئة التطوير

2.1. Python 3.8.1

تم اختبار الأمثلة الواردة في هذا المستند باستخدام مترجم Python 3.8.1 المتاح على الرابط |https://www.python.org/downloads/| (فبراير 2020) على جهاز يعمل بنظام Windows 10:

Image

يؤدي تثبيت Python إلى إنشاء دليل الملفات [1] والقائمة [2] في قائمة البرامج:

Image

  • [3-4]: مترجمان تفاعليان لـ Python؛
  • [5]: وثائق Python؛
  • [6]: وثائق وحدات Python؛

لن نستخدم مترجم Python التفاعلي. من المهم فقط معرفة أن البرامج النصية في هذا المستند يمكن تشغيلها باستخدام هذا المترجم. على الرغم من أنه مفيد لاختبار كيفية عمل ميزة Python، إلا أنه ليس عمليًا جدًا للبرامج النصية التي تحتاج إلى إعادة الاستخدام. فيما يلي مثال يستخدم الخيار [4] أعلاه:

Image

تسمح لك علامة >>> بإدخال عبارة Python يتم تنفيذها على الفور. الكود المكتوب أعلاه له المعنى التالي:

1
2
3
4
5
6
>>> nom="tintin"
>>> print("nom=%s" % nom)
nom=tintin
>>> print("type=%s" % type(nom))
type=<class 'str'>
>>>

السطور:

  • 1: تهيئة متغير. في لغة Python، لا تقوم بتعريف نوع المتغيرات. فهي تأخذ تلقائيًا نوع القيمة المخصصة لها. وقد يتغير هذا النوع بمرور الوقت؛
  • 2: عرض الاسم. 'name=%s' هو تنسيق عرض حيث %s هو معلمة شكلية تشير إلى سلسلة. name هي المعلمة الفعلية التي سيتم عرضها بدلاً من %s؛
  • 3: نتيجة العرض؛
  • 4: عرض نوع المتغير name؛
  • 5: المتغير name هو من نوع class هنا. في Python 2.7، سيكون له القيمة <type 'str'>؛

الآن، لنفتح وحدة تحكم Windows:

Image

حقيقة أننا تمكنا من كتابة [python] في [1] وأن الملف القابل للتنفيذ [python.exe] تم العثور عليه تظهر أنه موجود في مسار PATH لجهاز Windows. هذا مهم لأنه يعني أن أدوات تطوير Python ستتمكن من العثور على مترجم Python. يمكننا التحقق من ذلك على النحو التالي:

Image

  • في [2]، نخرج من مترجم Python؛
  • في [3]، الأمر الذي يعرض مسار PATH للملفات القابلة للتنفيذ على جهاز Windows؛
  • في [4]، نرى أن مجلد مترجم Python 3.8 هو جزء من مسار PATH؛

2.2. بيئة تطوير PyCharm Community

2.2.1. مقدمة

لبناء وتشغيل البرامج النصية في هذا المستند، استخدمنا محرر [PyCharm] Community Edition، المتاح (فبراير 2020) على الرابط |https://www.jetbrains.com/fr-fr/pycharm/download/#section=windows|:

Image

قم بتنزيل بيئة تطوير PyCharm Community [1-3] وتثبيتها.

قم بتشغيل PyCharm IDE وأنشئ مشروع Python الأول الخاص بك:

Image

Image

  • في [2-4]، قم بإنشاء مشروع جديد؛

يعرض بيئة تطوير PyCharm المشروع الذي تم إنشاؤه على النحو التالي:

Image

  • في [2-3]، دعونا نفحص خصائص IDE؛

Image

  • في [4]، مترجم Python الذي سيتم استخدامه للمشروع؛
  • في [5]، قائمة منسدلة بالمترجمات المتاحة؛
  • في [6]، حدد المترجم الذي تم تنزيله في قسم |Python 3.8.1|؛

Image

  • في [7]، المترجم المحدد؛
  • في [8]، قائمة الحزم المتاحة مع هذا المترجم. تحتوي الحزم على وحدات نمطية يمكن أن تستخدمها نصوص Python. هناك المئات من الوحدات النمطية المتاحة؛

لنبدأ بإنشاء مجلد نضع فيه نصوص Python الأولى لدينا:

Image

  • انقر بزر الماوس الأيمن على المشروع، ثم [1-2] لإنشاء مجلد؛
  • في [3]، اكتب اسم المجلد: سيتم إنشاؤه في مجلد المشروع؛

بعد ذلك، لنقم بإنشاء برنامج نصي بلغة Python:

Image

  • انقر بزر الماوس الأيمن على مجلد [bases]، ثم [1-3]؛
  • في [4-5]، أدخل اسم البرنامج النصي؛

لنكتب البرنامج النصي الأول:

Image

  • في [3]، نكتب البرنامج النصي التالي:
    • السطران 1 و3: التعليقات تبدأ برمز #؛
    • السطر 2: تهيئة متغير. لا تعلن لغة Python عن نوع متغيراتها؛
    • السطر 4: إخراج الشاشة. الصيغة المستخدمة هنا هي [format % data] مع:
      • format: name=%s حيث يشير %s إلى العنصر النائب لسلسلة. ستوجد هذه السلسلة في جزء [data] من التعبير؛
      • البيانات: ستحل قيمة المتغير [name] محل العنصر النائب %s في سلسلة التنسيق؛
  • مع [4-5]، نعيد تنسيق الكود وفقًا لتوصيات هيئة إدارة Python؛

يتم تنفيذ البرنامج النصي بالنقر بزر الماوس الأيمن على الكود [6]:

Image

  • في [7]، الأمر الذي تم تنفيذه؛
  • في [8]، نتيجة التنفيذ؛

لتشغيل البرنامج النصي في المستند، قم بتنزيل الكود من الرابط |https://tahe.developpez.com/tutoriels-cours/python-flask-2020/documents/python-flask-2020.rar| ثم اتبع الخطوات التالية في PyCharm:

Image

  • في [1-2]، افتح مشروعًا موجودًا: حدد المجلد الذي يحتوي على الكود الذي تم تنزيله؛
  • في [3]، يتم فتح المشروع؛
  • في [4-5]، قم بتشغيل أحد البرامج النصية للمشروع؛

Image

  • في [7-8]، نتائج التنفيذ؛

2.2.2. بيئة التنفيذ الافتراضية

بيئة العمل لدينا جاهزة الآن وجاهزة للعمل. ومع ذلك، سنقوم بتعديلها لكتابة البرامج النصية الخاصة بهذا المقرر. أولاً، دعونا نغير إعدادات PyCharm:

Image

في النافذة اليمنى:

  • بشكل افتراضي، يتم تحديد المربع [1]. قم بإلغاء تحديده حتى لا يفتح PyCharm آخر مشروع بشكل افتراضي، بل يسمح لنا باختيار المشروع الذي نريد فتحه؛
  • في [2]، لا نؤكد الخروج من PyCharm عند إغلاق نافذة التطبيق؛
  • في [3]، تفتح المشاريع الجديدة في نافذة منفصلة؛
  • في [4]، إذا أغلقت PyCharm أثناء تشغيل أحد البرامج، فسيتم إيقافه؛

الآن دعونا نغلق PyCharm ثم نعيد فتحه:

Image

  • في [1]، أنشئ مشروعًا جديدًا؛
  • في [2]، حدد مجلد المشروع؛
  • في [3]، حدد بيئة افتراضية. البيئة الافتراضية خاصة بالمشروع الذي تقوم بإنشائه. ولا تختلط مع البيئات الافتراضية للمشاريع الأخرى. يستخدم مشروع Python/Flask العديد من المكتبات الخارجية التي يجب تثبيتها. قد يستخدم المشروع P1 المكتبة B في الإصدار v1، وقد يستخدم المشروع P2 نفس المكتبة B ولكن في الإصدار v2. قد يكون هذان الإصداران متوافقين إلى حد ما. ومع ذلك، عند تثبيت مكتبة في الإصدار v2 والإصدار v1 مثبت بالفعل، يتم استبدال الإصدار v1 بالإصدار v2. قد يمثل هذا مشكلة للمشروع الذي كان يستخدم الإصدار v1 إذا لم يكن الإصدار الجديد v2 متوافقًا تمامًا مع الإصدار v1. لتجنب هذه المشكلات، يتم عزل كل مشروع في بيئة افتراضية؛
  • في [4]، حدد المجلد الذي سيتم تخزين مكتبات Python التي تم تنزيلها أثناء المشروع فيه. هنا، اخترنا مجلد [venv] (بيئة افتراضية) داخل مجلد المشروع. ليس هناك حاجة للقيام بذلك؛
  • في [5]، مترجم Python الخاص بالمشروع. هذا هو المترجم الذي قمنا بتثبيته في الخطوة السابقة؛
  • في [6]، قم بإنشاء المشروع؛

Image

  • في [7-8]، المشروع الذي تم إنشاؤه؛
  • في [9]، بيئة تشغيل المشروع، والتي تسمى بيئة افتراضية؛
  • في [10]، المجلد [site-packages] هو المكان الذي سيتم فيه تخزين المكتبات التي سيتم تنزيلها لاحقًا؛

2.2.3. Git

بعد ذلك، نقوم بتنشيط نظام التحكم في الإصدارات. هنا، سنستخدم Git [1-4]:

Image

يتيح لك نظام التحكم في الإصدارات (VCS) تتبع التغييرات التي تطرأ على المشروع. يمكنك التقاط لقطات، من خلال عملية تسمى الالتزام (commit)، للمشروع في مراحل مختلفة من دورة حياته. إذا قمت بعملية التزام مرتين في الوقت T و T+1، فإن VCS يتيح لك رؤية ما تغير بين النسختين الملتزم بهما. عادةً، يتم استخدام VCS من قبل فريق من المطورين. يقومون بالالتزام برموزهم البرمجية بمجرد اختبارها بدقة. من خلال VCS، يمكن للمطورين الآخرين استرداد هذه الرموز البرمجية التي تم التحقق من صحتها واستخدامها.

هنا، يوجد مطور واحد فقط. تظهر التجربة أن التطبيق قد يعمل في الوقت T ولكنه لا يعمل في الوقت T+1. في هذه الحالة، نرغب في العودة إلى الوقت T للبدء من الصفر. يسمح نظام التحكم في الإصدارات (VCS) بذلك، ولهذا السبب سنستخدمه هنا.

سنوضح لك كيفية القيام بذلك باستخدام Git.

Image

  • في [1]، حدد علامة التبويب [Git] (أسفل اليسار)؛
  • في [2]، يمكنك أن ترى أن هناك 495 ملفًا للمشروع لم يتم إصدارها بواسطة Git. وهذا يعني أنها لن يتم تضمينها في لقطة المشروع أثناء عمليات الالتزام؛
  • في [3]، زر [commit] أو زر التحقق من صحة المشروع. كما ذكرنا، يقوم Git بعد ذلك بأخذ لقطة للمشروع وتخزينها في مجلد [.git] في جذر المشروع (لا يعرضه PyCharm ولكنه مرئي في مستكشف Windows

دعونا نلتزم [3] بالمشروع في حالته الحالية.

  • في [4]، قائمة الملفات غير المصنفة؛
  • في [5]، تنتمي جميع هذه الملفات غير المحددة الإصدار إلى البيئة الافتراضية [venv]؛
  • في [6]، يجب أن يكون كل التزام مصحوبًا برسالة. هنا، يصف المطور التغييرات التي أدخلتها النسخة المراد الالتزام بها مقارنةً بآخر نسخة تم الالتزام بها؛

يمكن لـ Git تجاهل مجلدات أو ملفات معينة. وبالتالي، لا يتم تضمينها أبدًا في اللقطة. في [5] أعلاه، انقر بزر الماوس الأيمن على مجلد [venv].

  • في [1-3]، نحدد أن مجلد [venv] يجب ألا يُدرج في لقطات Git. يتم تخزين قائمة المجلدات والملفات التي يتجاهلها Git في ملف يسمى [.gitignore] [4]؛

Image

Image

  • بعد الخطوة السابقة، تختفي جميع الملفات الموجودة في مجلد [venv] من قائمة الملفات غير الخاضعة للإصدار. ويبقى فقط ملف [.gitignore] الذي تم إنشاؤه للتو؛
  • في [5]، نختاره ليتم حفظه؛
  • في [6]، نقوم بإنشاء رسالة التزام:
  • في [7]، نؤكد. ثم يتم التقاط لقطة للمشروع؛

Image

  • في [8-9]، محتويات ملف [.gitignore]: سطر واحد يحتوي على اسم مجلد [/venv]، مما يشير إلى أنه يجب تجاهل محتوياته في اللقطات؛

الآن دعونا نرى كيف يمكن أن يكون Git مفيدًا. أولاً، نقوم بإنشاء مجلد [git] (يمكنك استخدام أي اسم آخر — يمكن حذفه في نهاية العرض التوضيحي):

Image

  • في [1-5]، نقوم بإنشاء مجلد [git]؛ Image
  • في [6-10]، نقوم بإنشاء برنامج نصي Python [git_01]؛

Image

  • في [11-12]، يحتوي البرنامج النصي على تعليق فقط؛
  • في [13-14]، قم بإنشاء نسخة من [git_01]. للقيام بذلك، حدد [git_01]، واضغط على Ctrl-C (نسخ)، ثم Ctrl-V (لصق)، وأدخل [git_02] كاسم للملف؛

Image

الآن، دعونا نلتزم بمشروعنا. سيتم التقاط لقطة للملفين [git_01، git_02]؛

Image

  • في [1-3]، قم بتسجيل المشروع؛
  • في [4]، حدد الملفات غير الخاضعة للتحكم في الإصدارات التي تريد إرسالها — في هذه الحالة، جميعها؛
  • في [5]، أدخل رسالة التسجيل؛
  • في [6]، نؤكد؛

Image

  • في [1-2]، قم بتأكيد الإرسال؛
  • في [3]، حدد علامة التبويب [Log]؛
  • في [4]، عرض لفروع المشروع. هنا، يوجد فرع واحد فقط يسمى [master]؛
  • في [5-6]، عملية التسليم التي تمت للتو؛

والآن لنقم بإنشاء سكريبت [git_03] بنفس الطريقة:

Image

قم بتعديل البرنامج النصي [git_02] وحذف البرنامج النصي [git_01]:

Image

ثم قم بتثبيت الإصدار الجديد:

Image

الآن لدينا عمليتا التزام في السجلات:

Image

عند تحديد عملية تسجيل معينة، تظهر شجرة ملفات المشروع على يمينها:

Image

لنفترض الآن أن الالتزام الأخير قد قادنا إلى طريق مسدود ونريد الرجوع إلى حالة تتوافق مع أحد الالتزامات السابقة:

Image

  • في [1-2]، حدد الالتزام الذي تريد الرجوع إليه؛
  • في [3-5]، هناك عدة أوضاع لإعادة الضبط. نختار الوضع [hard]، الذي يعيدنا إلى الحالة المحددة مع تجاهل التغييرات التي تم إجراؤها منذ ذلك الحين؛

Image

  • في [6]، استعدنا [git_01الذي تم حذفه؛
  • في [7-8]، نجد [git_02] في حالته الأصلية بدون التعديل الذي تم إجراؤه؛

الآن، دعونا نعدل [git_02] ونضيف [git_03] [1-4]:

Image

الآن، دعونا نكرر عملية الرجوع إلى الالتزام الأولي:

Image

  • في [1-4]، نعود إلى لقطة الالتزام رقم 1؛
  • في [5-6]، نختار خيار [Keep] بدلاً من [Hard]. هذه الخيارات ليست سهلة الفهم. لذا نحتاج إلى تجربتها:
  • في [1]، لا يزال الملف [git_03] موجودًا؛
  • في [2-3]، احتفظ ملف [git_02] بتعديلاته؛

من الصعب تحديد ما فعله هذا [Revert Commit]. الآن دعونا نلتزم بالحالة الحالية:

Image

  • في [1-6]، التثبيت؛

Image

  • في [9]، نرى الالتزام الجديد؛

الآن، دعونا نحاول العودة إلى الالتزام 1 كما فعلنا من قبل:

  • في [1-6]، نعود إلى الالتزام رقم 1 في الوضع [Hard]؛

Image

  • في [7-8]، فقدنا هذه المرة بالفعل جميع التغييرات التي أُجريت منذ عملية التسجيل الأولى؛

من الآن فصاعدًا، لن نعود إلى [Git] مرة أخرى. يمكن للقارئ المتابعة على النحو التالي:

  • يمكنه اتباع الأمثلة المقدمة إما عن طريق كتابتها بنفسه أو عن طريق تنزيلها من موقع الويب الخاص بالدورة التدريبية؛
  • عندما يعمل أحد الأمثلة، يمكنه إجراء التزام لمشروعه؛
  • عند تطوير الكود الخاص به والوصول إلى طريق مسدود، يعرف أنه يمكنه العودة إلى حالة مستقرة بالرجوع إلى التثبيت السابق؛

2.3. قواعد البرمجة في Python

يمكنك كتابة كود Python دون اتباع قواعد البرمجة، وسيظل يعمل. لكن قد لا يحظى ذلك بتقدير مجتمع Python، الذي وضع قواعد للبرمجة. تم تلخيص هذه القواعد في منشور على |https://stackoverflow.com/questions/159720/what-is-the-naming-convention-in-python-for-variable-and-function-names|:

Image

  • يتبع اسم الوحدة النمطية (module_name) قاعدة تُسمى أحيانًا [snake_case]: جميع الأحرف صغيرة، مع فصل الكلمات بشرطة سفلية إذا لزم الأمر. تنطبق قاعدة [snake_case] هذه على أسماء الطرق والحزم والمتغيرات والوظائف؛
  • يتبع اسم الفئة (ClassName) قاعدة تسمية تُعرف أحيانًا باسم [PascalCase]: سلسلة من الكلمات المرتبطة معًا مع كتابة الحرف الأول من كل كلمة بحرف كبير؛
  • تتبع أسماء الثوابت قاعدة [SNAKE_CASE]: سلسلة من الكلمات المكتوبة بأحرف كبيرة ومفصولة بشرطات سفلية؛

تم اتباع هذه القواعد بشكل عام في هذا المستند. ومع ذلك، بالنسبة للوحدات النمطية التي تحدد فئة، فقد أعطيت الوحدة النمطية نفس اسم الفئة التي تحتوي عليها. وبالتالي فهي تتبع قاعدة [PascalCase] بدلاً من [snake_case]. أردت أن أتمكن من التعرف بسرعة على الوحدات النمطية للفئات.