اذهب إلى المحتوى

متغير البيئة PATH والعمل دون نافذة سطر الأوامر في بايثون


محمد الخضور

تعرفنا في مقال سابق من هذه السلسة على الأوامر الشائعة في نافذة سطر أوامر بايثون، وفيه عرّفنا مفهوم متغيرات البيئة وكيفية عرضها.

ولعلّ أحد أهم هذه المتغيرات للفهم هو متغير المسار PATH، لدوره المحوري في كيفية تعامل نافذة سطر الأوامر مع الأوامر المكتوبة ضمنها.

فعندما نكتب أمرًا أو اسم برنامج في نافذة سطر الأوامر فإنها تتفحص المجلدات الموجودة في متغير البيئة PATH بحثًا عن ذلك الاسم، ومن الضروري فهم هذه الآلية ما يساعد على تفسير سبب ظهور رسائل الخطأ command not found التي قد تواجهنا.

ما هو متغير البيئة PATH؟

عند كتابة أمر ما مثل الأمر python في نظام التشغيل ويندوز أو الأمر python3 في نظامي التشغيل ماك أو إس ولينكس، تتحقق نافذة موجه الأوامر من وجود برنامج بذلك الاسم في المجلد الحالي. وإن لم تجده هناك، فستبحث في المجلدات المذكورة في متغير البيئة PATH.

كمثال على ذلك، يوجد البرنامج python.exe على حاسوب يعمل بنظام تشغيل ويندوز في مجلد C:\Users\Al\AppData\Local\Programs\Python\Python38، ولتشغيله علينا إدخال المسار الآتي كاملًا:

 C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe

أو الانتقال إلى ذلك المجلد ومن ثم إدخال الأمر python.exe.

إلا أن المسار الطويل هذا يتطلب الكثير من الكتابة، لذا من الممكن إضافة هذا المسار إلى متغير البيئة PATH، وبذلك وبمجرد كتابة الأمر python.exe في أي موقع، سيبحث برنامج سطر الأوامر عن برنامج بنفس الاسم في المجلدات الموجودة في PATH، ما يوفر عليك عناء كتابة المسارات الكاملة للملفات كل مرة.

وبما أن متغيرات البيئة لا يمكن أن تحتوي إلا على سلسلة مفردة، فإن إضافة أسماء عدة مجلدات إلى متغير البيئة PATH يتطلب استخدام صيغة خاصة، في نظام التشغيل ويندوز نستخدم الفاصلة المنقوطة للفصل بين أسماء المجلدات.

من الممكن عرض قيمة المتغير PATH الحالية باستخدام الأمر path، بالشكل:

C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
--snip--
C:\Users\Al\AppData\Local\Microsoft\WindowsApps

أما في نظامي التشغيل ماك أو إس ولينكس، فيتم الفصل بين أسماء المجلدات باستخدام الفاصلة، بالشكل:

al@ubuntu:~$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

إن ترتيب أسماء المجلدات ضروري، فإن كان لدينا ملفان يحملان الاسم someProgram.exe في المجلدين C:\WINDOWS\system32 و C:\WINDOWS فإن إدخال الأمر someProgram.exe سيشغل البرنامج الموجود في المجلد C:\WINDOWS\system32 لأن هذا المجلد يظهر أولًا ضمن متغير البيئة PATH.

إن لم يكن البرنامج أو الأمر الذي أدخلناه موجودًا في دليل العمل الحالي أو أي من المجلدات المخزنة في المتغير PATH، فعندها ستعرض نافذة سطر الأوامر رسالة خطأ مثلاً command not found أو not recognized as an internal or external command بمعنى أن الأمر غير موجود أو أنه أمر خارجي أو غير معرف، وإن كنت متأكدًا من عدم وجود أي خطأ إملائي، فعليك التأكد من وجود المجلد المتضمن للبرنامج المطلوب ضمن متغير البيئة PATH.

تغيير متغير البيئة PATH الخاص بسطر الأوامر

من الممكن تغيير متغير البيئة PATH الخاص بنافذة موجه الأوامر ليتضمن المزيد من المجلدات، وتختلف طريقة إضافة مجلدات إلى المتغير PATH بعض الشيء بين أنظمة التشغيل المختلفة، ففي نظام التشغيل ويندوز يمكن تنفيذ الأمر path لإضافة مجلد جديد إلى قيمة المتغير PATH الحالية، بالشكل:

1 C:\Users\Al>path C:\newFolder;%PATH%

2 C:\Users\Al>path
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
--snip--
C:\Users\Al\AppData\Local\Microsoft\WindowsApps

وبذلك يتوسع المسار %PATH% (المشار له في السطر رقم 1) إلى القيمة الجديدة لمتغير البيئة PATH، عبر إضافة اسم المجلد الجديد مع فاصلة منقوطة إلى بداية القيمة الحالية للمتغير PATH، وبتشغيل الأمر path مجددًا، ستلاحظ القيمة الجديدة للمتغير.

أم في في نظامي التشغيل ماك أو إس ولينكس، فيمكن ضبط متغير البيئة PATH بصيغة مشابهة لعبارة الاسناد التقليدية في بايثون، بالشكل:

1 al@al-VirtualBox:~$ PATH=/newFolder:$PATH
2 al@al-VirtualBox:~$ echo $PATH
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

وبذلك يتوسع المسار %PATH% (المشار له في السطر رقم 1) إلى القيمة الجديدة لمتغير البيئة PATH، عبر إضافة اسم المجلد الجديد مع فاصلة منقوطة إلى بداية القيمة الحالية للمتغير PATH، وبتشغيل الأمر path مجددًا، ستلاحظ القيمة الجديدة للمتغير.

لكن التغييرات في قيمة المتغير PATH الناتجة عن الطريقتين السابقتين تسري فقط على نافذة موجه الأوامر الحالية، وأي برنامج يتم تشغيله عبرها بعد إجراء التغيير، لكن لدى فتح نافذة موجه أوامر جديدة، فلن تكون هذه التغيرات مطبقة عليها، لذا لإضافة المجلدات بطريقة دائمة، يجب تغيير مجموعة متغيرات البيئة الخاصة بنظام التشغيل.

إضافة المجلدات بطريقة دائمة إلى المتغير PATH في نظام التشغيل ويندوز

يحتوي نظام التشغيل ويندوز على مجموعتين من متغيرات البيئة: متغيرات البيئة الخاصة بالنظام (المطبقة على جميع المستخدمين)، ومتغيرات البيئة الخاصة بالمستخدم (والتي تتجاوز متغيرات البيئة الخاصة بالنظام وتطبق فقط على المستخدم الحالي).

ولتعديل هذه المتغيرات، نضغط على قائمة ابدأ ثم نكتب في مربع البحث Edit environment variables for your account، فتفتح نافذة متغيرات البيئة كما هو مبين في الشكل التالي أدناه.

نختار المتغير Path من قائمة متغيرات المستخدم (وليس من قائمة متغيرات النظام) ثم نضغط على تحرير Edit ونضيف اسم مجلد جديد في حقل النص الذي يظهر (نضيف فاصلة منقوطة للفصل بين الأسماء) ثم نضغط موافق OK.

ليس من السهل العمل مع هذه الواجهة، لذا إن لم تكن متمرسًا بتغيير متغيرات البيئة في ويندوز ننصحك بتحميل البرنامج المجاني Rapid Environment Editor من الرابط https://www.rapidee.com/.

بعد تثبيت هذا البرنامج يجب تشغليه كمسؤول لتعديل متغيرات البيئة الخاصة بالنظام، لذا نضغط على زر ابدأ ونكتب في مربع البحث Rapid Environment Editor ونضغط بزر الفأرة الأيمن على أيقونة البرنامج ونختار التشغيل كمسؤول.

يمكننا تعديل متغير PATH الخاص بالنظام بشكل دائم من موجه الأوامر باستخدام الأمر setx، بالشكل:

C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"

كما يجب تشغيل موجه الأوامر كمسؤول لتنفيذ الأمر setx.

تشغيل موجه الأوامر كمسؤول لتنفيذ الأمر setx

نافذة متغيرات البيئة في نظام التشغيل ويندوز.

إضافة مجلدات بطريقة دائمة إلى متغير المسار PATH في ماك أو إس ولينكس

لإضافة مجلدات إلى متغير البيئة PATH في جميع نوافذ موجهات الأوامر في نظامي التشغيل ماك أو إس ولينكس، لابد من تعديل الملف النصي ‎.bashrc في المجلد الرئيسي بإضافة السطر التالي:

export PATH=/newFolder:$PATH

يعمل هذا السطر على تعديل المتغير PATH لجميع موجهات الأوامر التي ستشغل مستقبلًا.

أما في إصدار ماك أو إس كاتالينا أو الإصدارات الأحدث، فقد تغير برنامج الصدفة الافتراضي من Bash إلى Z Shell، وبالتالي يجب تعديل الملف النصي ‎.‎zshrc في المجلد الرئيسي بدلًا من الملف النصي ‎.bashrc.

تشغيل برامج بايثون دون استخدام نافذة سطر الأوامر

جميعنا في الغالب يعلم كيفية تشغيل البرامج باستخدام المشغل المزود به نظام التشغيل، فمثلًا يحتوي نظام ويندوز على قائمة ابدأ، في حين يحتوي نظام ماك أو إس على Finder و Dock، أما نظام أوبنتو لينكس فيحتوي على Dash، إذ تضيف البرامج نفسها إلى هذه المشغلات فور تثبيتها، كما من الممكن تشغيل البرامج من مستكشف الملفات (مثل File Explorer في ويندوز و Finder في ماك أو إس و Files في أبونتو لينكس) وذلك بالنقر المزدوج على أيقونة البرنامج.

إلا أن هذه الطرق لا تنطبق على برامج بايثون، فالنقر المزدوج على ملف ذو اللاحقة ‎.py سيفتح برنامج بايثون ضمن محرر النصوص أو بيئة تطوير متكاملة IDE بدلاً من تشغيله، ولو أردت تشغيل بايثون مباشرة، ستفتح الصدفة التفاعلية فحسب.

إن الطرق الأكثر شيوعًا لتشغيل برامج بايثون هي إما فتحها بواسطة بيئة تطوير متكاملة ما والضغط على خيار التشغيل run، أو تنفيذه في موجه الأوامر. كلا الطريقتين مملتين إن كان كل ما تريده هو مجرد تشغيل برنامج بايثون.

فبدلًا من ذلك، من الممكن ضبط برامج بايثون لتعمل بسهولة باستخدام المشغل الخاص بنظام التشغيل، كأي برنامج آخر. الأقسام التالية تبين كيفية القيام بذلك في أنظمة التشغيل المختلفة.

تشغيل برامج بايثون على نظام التشغيل ويندوز

يمكن تشغيل برامج بايثون في نظام التشغيل ويندوز بعدة طرق، فبدلًا من فتح نافذة موجه الأوامر، من الممكن الضغط على زري WIN+R في لوحة المفاتيح لفتح نافذة المشغل Run، وفيها نكتب py c:\path\to\yourScript.py كما هو مبين في الشكل التالي، حيث أن البرنامج py.exe مثبت في المسار C:\Windows\py.exe الموجود ضمن متغير البيئة PATH، أما اللاحقة exe. فهي اختيارية عند تشغيل البرامج.

تشغيل برامج بايثون على نظام التشغيل ويندوز

نافذة Run في نظام التشغيل ويندوز

إلا أن الطريقة السابقة تتطلب إدخال المسار الكامل للنص البرمجي، كما أن نافذة موجه الأوامر التي ستعرض خرج البرنامج، ستغلق تلقائيًا بمجرد انتهاء التنفيذ وبالتالي قد لا نلاحظ بعض نتائج الخرج.

يمكن حل هذه المشاكل بإنشاء نص برمجي دفعي batch script، وهو ملف نصي صغير ذو لاحقة bat. يمكن له تشغيل عدة موجهات أوامر دفعة واحدة بما يشبه النص البرمجي للصدَفَة shell script في نظامي التشغيل ماك أو إس ولينكس، ومن الممكن استخدام أي محرر نصوص (كبرنامج المفكرة) لإنشاء هذه الملفات، وكمثال سننشئ ملفًا نصيًا جديدًا يحتوي على الأمرين التاليين:

@py.exe C:\path\to\yourScript.py %*
@pause

مع مراعاة استبدال المسار في الشيفرة السابقة بالمسار المطلق للبرنامج لديك، واحفظ الملف باللاحقة bat. (مثلاً yourScript.bat)، إن رمز @ في بداية كل أمر تمنع عرضه في نافذة موجه الأوامر، ويعمل الرمز *%‎ على توجيه أي وسطاء موجه أوامر مدخلة بعد اسم الملف الدفعي إلى شيفرة بايثون، التي تقرأ بدورها الوسطاء من القائمة sys.argv.

وبذلك سيغنيك هذا الملف الدفعي عن كتابة المسار المطلق الكامل لبرنامج بايثون في كل مرة تريد تشغيله فيها، كما أن الأمر pause@ سيضيف عبارة press any key to continue… إلى نهاية الخرج وذلك لمنع النافذة من الإغلاق بسرعة.

وفي هذا الصدد يُنصح بوضع جميع الملفات الدفعية وملفات py. في مجلد واحد موجود مسبقًا في متغير البيئة PATH كالمجلد الرئيسي ‪C:\Users\

وبذلك وبعد إعداد الملف الدفعي يمكنك تشغيل شيفرات بايثون من خلال الضغط على WIN+R وإدخال اسم الملف الدفعي (إدخال لاحقة bat. هو أمر اختياري) والضغط على زر ENTER.

تشغيل برامج بايثون في نظام التشغيل ماك أو إس

يمكن إنشاء نص برمجي للصدَفَة في نظام التشغيل ماك أو إس لتشغيل شيفرات بايثون بإنشاء ملف نصي ذو لاحقة command.

لذا سننشئ ملفًا باستخدام أحد محررات النصوص (مثل TextEdit) ونكتب ضمنه التالي:

#!/usr/bin/env bash
python3 /path/to/yourScript.py

نحفظ الملف في المجلد الرئيسي، ومن نافذة موجه الأوامر نجعل شيفرة الصدفة السابقة قابلة للتنفيذ بتشغيل الأمر chmod u+x yourScript.command.

وبذلك يصبح من الممكن الضغط على أيقونة Spotlight (أو على شريط Command-Space) وإدخال اسم الملف المتضمن شيفرة بايثون المراد تنفيذها، ليتولى النص البرمجي للصدَفَة هذا الأمر.

تشغيل برامج بايثون في نظام أوبنتو لينكس

لا يوجد طريقة سريعة لتشغيل نصوص بايثون البرمجية في نظام أبونتو لينكس كما هو الحال في ويندوز وماك أو إس، لكن من الممكن اختصار بعض الخطوات اللازمة، لذا تأكد بدايةً من وجود الملف ذو اللاحقة py. في المجلد الرئيسي، واكتب الأمر التالي في السطر الأول من الملف ذو اللاحقة py.، بالشكل:

#!/usr/bin/env python3

يدعى هذا بسطر shebang دلالةً على الرمز #! الذي يبدأ به، مخبرًا نظام أبونتو بأنه عند تشغيل هذا الملف نريد استخدام python3 في ذلك، ومن ثم نضيف سماحية التنفيذ إلى الملف هذا باستخدام الأمر chmod في نافذة موجه الأوامر، بالشكل:

al@al-VirtualBox:~$ chmod u+x yourScript.py

والآن متى ما أردت تشغيل شيفرتك المكتوبة في ملف بايثون هذا، يمكنك الضغط على مفاتيح CTR+ALT+T لفتح نافذة موجه أوامر جديدة، حيث ستكون هذه النافذة مضبوطة افتراضيًا على المجلد الرئيسي، لذلك يمكنك إدخال الأمر yourScript.py/. بسهولة لتشغيل البرنامج.

إن الرمز /. ضروري كونه يخبر نظام أبونتو بأن الملف yourScript.py موجود ضمن دليل العمل الحالي (وهو نفسه المجلد الرئيسي في هذه الحالة).

الخلاصة

يتضمن ضبط البيئة كافة الخطوات الضرورية لجعل الحاسوب قادرًا على تشغيل برامجنا بسهولة، وتتطلب هذه العملية منا معرفة بعض المفاهيم الأولية حول كيفية عمل الحاسوب، كفهم متغيرات البيئة.

فعندما نكتب أمرًا أو اسم برنامج في نافذة سطر الأوامر فإنها تتفحص المجلدات الموجودة في متغير البيئة PATH بحثًا عن ذلك الاسم، ومن الضروري فهم هذه الآلية ما يساعد على تفسير سبب ظهور رسائل الخطأ command not found التي قد تواجهنا.

وتختلف قليلًا خطوات إضافة مجلدات جديدة إلى متغير البيئة PATH باختلاف أنظمة التشغيل.

قد يستغرق الأمر وقتًا لتعتاد التعامل مع موجه الأوامر، نظرًا لكثرة الأوامر ووسطاء كل منها، لذا لا تتردد في البحث مطولًا على الإنترنت عن المساعدة، فهو الأمر الطبيعي الذي يقوم به مطورو البرامج يوميًا.

ولا تنسَ أنّه من الممكن ضبط برامج بايثون لتعمل مباشرةً باستخدام المشغل الخاص بنظام التشغيل، كأي برنامج آخر في حال كان المطلوب ببساطة مجرد تشغيل برنامج ما.

ترجمة -وبتصرف- للفصل الثاني "إعداد البيئة وواجهة سطر الأوامر" من كتاب Beyond the Basic Stuff with Python لصاحبه Al Sweigart.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...