الدرس 1 من 14 · أساسيات اللغة
Python: التثبيت، المفسّر، السكربت الأول، venv وpip
الهدف
إعداد بيئة عمل Python نظيفة: أن تعرف أيّ إصدار من Python مثبّت، وأن تتحاور مع المفسّر، وأن تكتب سكربتًا أول وتشغّله، ثم أن تمنح كل مشروع بيئته الافتراضية الخاصة لتثبيت المكتبات باستعمال pip دون إفساد النظام.
أهم النقاط
- Python لغة مُفسَّرة (interpreted): لا حاجة إلى ترجمة (compilation)، نكتب ملف
.pyوننفّذه باستعمالpython3 fichier.py. - يُستعمل المفسّر التفاعلي (
python3وحده، مع المحثّ>>>) لتجربة فكرة في بضع ثوانٍ. - على Linux استعمل
python3؛ وعلى Windows استعمل المُشغِّلpy. تحقّق دائمًا من الإصدار باستعمالpython3 --version. - البيئة الافتراضية (
python3 -m venv .venv) مجلد يحتوي على Python وحزم خاصة بمشروع واحد. - نثبّت الحزم باستعمال
python -m pip install …داخل البيئة المفعّلة، وأبدًا ليس باستعمالsudo pip.
1. لماذا Python؟
يحظى Python بالتقدير لأنه يُقرأ تقريبًا مثل إنجليزية بسيطة، ولأنه يأتي مع مكتبة قياسية (standard library) غنية جدًا (الملفات، التواريخ، JSON، CSV، HTTP، الضغط، قواعد SQLite…). اللغة نفسها تخدم:
- مدير الأنظمة الذي يستبدل سكربت shell من 300 سطر بـ 60 سطرًا مقروءًا؛
- المطوّر الذي يكتب API ويب لتطبيق توصيل في الدار البيضاء؛
- المحلّل الذي يحوّل كل شهر ملف Excel لمبيعات تعاونية إلى تقرير واضح.
تدين اللغة باسمها للفكاهيين الإنجليز Monty Python، وليس للثعبان. والدرس الرسمي يشير إلى ذلك باستمرار على سبيل الدعابة.
2. تثبيت Python
على Linux
توفّر معظم التوزيعات Python 3 مسبقًا: فكثير من أدوات النظام تعتمد عليه. تحقّق:
python3 --version # مثال: Python 3.12.3
which python3 # /usr/bin/python3
إذا كان غير موجود، فثبّته باستعمال مدير الحزم الخاص بتوزيعتك، مع وحدة البيئات الافتراضية:
# Debian / Ubuntu
sudo apt install python3 python3-venv python3-pip
# Rocky / Alma / RHEL
sudo dnf install python3 python3-pip
لا تحذف أبدًا Python الخاص بالنظام، ولا تستبدل /usr/bin/python3 بإصدار آخر: فأدوات مثل dnf وapt وfirewalld تعتمد عليه.
على Windows
ثبّت Python من الموقع الرسمي (python.org) أو من Microsoft Store. الأمر الذي يجب تذكّره هو المُشغِّل py:
py --version
py -3.12 script.py # اختيار إصدار محدّد إذا كانت عدة إصدارات مثبّتة
أثناء التثبيت من python.org، فعّل الخيار الذي يضيف Python إلى PATH.
أيّ إصدار؟
استعمل إصدارًا 3.x حديثًا ومُصانًا (3.12 في تماريننا). انتهى Python 2 منذ 2020: إذا كتب درس قديم print "bonjour" دون أقواس، فهو يعود إلى تلك الحقبة.
3. المفسّر التفاعلي
اكتب python3 دون وسيط (argument):
$ python3
Python 3.12.3 (main, …) [GCC …] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + 3
5
>>> 1500 * 1.20 # السعر مع الضريبة لسلعة بـ 1 500 درهم دون ضريبة
1800.0
>>> "Rabat".upper()
'RABAT'
>>> help(len) # المساعدة المدمجة؛ المفتاح q للخروج
>>>هو المحثّ الرئيسي، و...يظهر عندما تمتدّ تعليمة على عدة أسطر (بعدifأوfor)؛- في الوضع التفاعلي تُعرض قيمة التعبير تلقائيًا؛ أما في السكربت فيلزم
print()؛ - للخروج:
Ctrl-Dعلى Linux، وCtrl-Zثم Entrée على Windows، أوquit().
هناك طريقتان أخريان لتشغيل المفسّر مفيدتان جدًا في إدارة الأنظمة:
python3 -c 'print(19 * 1.2)' # تنفيذ تعليمة صغيرة
python3 -m http.server 8000 # تشغيل وحدة من المكتبة كبرنامج
python3 -i script.py # تنفيذ السكربت ثم البقاء في الوضع التفاعلي
4. السكربت الأول
السكربت ملف نصي بسيط بترميز UTF-8 وامتداد .py. أنشئ facture.py:
# facture.py — حساب فاتورة بسيطة
print("Coopérative Tifaout — facture")
prix_ht = 250
print("Prix TTC :", prix_ht * 1.20, "DH")
شغّله:
python3 facture.py
# Coopérative Tifaout — facture
# Prix TTC : 300.0 DH
ملاحظات:
- الرمز
#يبدأ تعليقًا (comment) يتجاهله Python؛ - يقرأ Python الملف من الأعلى إلى الأسفل وينفّذ كل سطر بالترتيب؛
- الإزاحة (indentation) مهمّة: يجب ألّا يبدأ سطر بمسافات دون سبب (سترى السبب مع الشروط). اضبط محرّرك على 4 مسافات، ولا تخلط أبدًا مع علامات الجدولة (tabs).
استقبال الوسائط
تتيح الوحدة sys الوصول إلى وسائط سطر الأوامر:
# salut.py
import sys
print("Bonjour", sys.argv[1])
python3 salut.py Youssef # Bonjour Youssef
sys.argv[0] هو اسم السكربت، وsys.argv[1] هو الوسيط الأول، وهكذا (الدرس 3.1: الوحدة argparse تقوم بذلك بشكل أنظف).
5. جعل السكربت قابلًا للتنفيذ
على Linux يمكن تشغيل سكربت كأمر عادي دون كتابة python3 قبله. يلزم أمران:
- سطر أول shebang يحدّد المفسّر؛
- صلاحية التنفيذ.
#!/usr/bin/env python3
print("Sauvegarde du serveur web…")
chmod +x sauvegarde.py
./sauvegarde.py
يبحث #!/usr/bin/env python3 عن python3 في PATH: وهذا أكثر قابلية للنقل من #!/usr/bin/python3، ويحترم البيئة الافتراضية المفعّلة. انتبه: يجب أن يحتوي الملف على نهايات أسطر Unix (LF)؛ فالملف المحفوظ على Windows (CRLF) يسبّب الخطأ /usr/bin/env: 'python3\r': No such file or directory.
6. البيئات الافتراضية
المشكلة
يستعمل موقع الحجز الخاص برياض الإصدار 1 من مكتبة ما؛ أما أداة الفوترة، على الخادم نفسه، فتتطلّب الإصدار 2. مع تثبيت واحد لـ Python، سيتعطّل أحدهما. كما أن تثبيت الحزم في Python الخاص بالنظام قد يُفسد أدوات التوزيعة.
الحل: مجلد لكل مشروع
cd ~/projets/facturation
python3 -m venv .venv # ينشئ المجلد .venv
source .venv/bin/activate # Linux / macOS
# .venv\Scripts\activate # Windows
(.venv) $ which python
/home/sara/projets/facturation/.venv/bin/python
(.venv) $ deactivate # العودة إلى Python الخاص بالنظام
- ينسخ
venv(أو يربط) المفسّر الذي شغّلته به:python3.12 -m venv .venvيعطي بيئة 3.12؛ - الاسم
.venvهو العُرف المتّبع: مخفيّ، وواضح، ولا يختلط بملف إعدادات.env؛ - تفعيل البيئة لا يغيّر إلا الـ shell الحالي (
PATHوالمحثّ)؛ - دون تفعيل، يمكن استدعاء
.venv/bin/python script.pyمباشرة: وهذا ما نفعله في مهمة cron أو في وحدة systemd؛ - المجلد
.venvلا يُنسخ من جهاز إلى آخر ولا يوضع أبدًا في Git (أضفه إلى.gitignore).
لمعرفة ما إذا كنا داخل بيئة افتراضية، انطلاقًا من Python:
import sys
print(sys.prefix) # مجلد البيئة
print(sys.base_prefix) # Python الأصلي؛ يختلف عن sys.prefix داخل venv
7. تثبيت الحزم باستعمال pip
يقوم pip بتنزيل الحزم من PyPI (Python Package Index). استعمل الصيغة python -m pip: هكذا تضمن أنك تستعمل pip الخاص بـ Python النشط.
(.venv) $ python -m pip install requests # آخر إصدار
(.venv) $ python -m pip install "requests==2.32.3" # إصدار محدّد
(.venv) $ python -m pip install --upgrade requests # التحديث
(.venv) $ python -m pip list # الحزم المثبّتة
(.venv) $ python -m pip show requests # تفاصيل حزمة
(.venv) $ python -m pip uninstall requests
requirements.txt
لكي يحصل زميل (أو خادم الإنتاج) على الإصدارات نفسها بالضبط:
(.venv) $ python -m pip freeze > requirements.txt # تثبيت الإصدارات
(.venv) $ cat requirements.txt
certifi==2024.8.30
requests==2.32.3
…
# على الجهاز الآخر:
(.venv) $ python -m pip install -r requirements.txt
الملف requirements.txt يوضع في Git، أما المجلد .venv فلا.
الخطأ «externally-managed-environment»
على Debian 12 وUbuntu 23.04 والإصدارات الأحدث، يُرفض pip install خارج البيئة الافتراضية مع الرسالة externally-managed-environment. ليس هذا خللًا: فالتوزيعة تحمي Python الخاص بها. الجواب الصحيح هو إنشاء venv، وليس إضافة --break-system-packages.
8. محرّر النصوص
أيّ محرّر نصوص يكفي، لكن محرّرًا يفهم Python سيوفّر عليك وقتًا كثيرًا: تلوين الشيفرة، والإزاحة التلقائية بـ 4 مسافات، واكتشاف الأخطاء. VS Code (مع امتداد Python) وPyCharm Community مجانيان. وعلى الخادم، يكفي vim أو nano للسكربتات الصغيرة.
أخطاء متكررة
pythonمقابلpython3: في كثير من توزيعات Linux،pythonغير موجود أو يشير إلى شيء آخر. اكتبpython3(أوpythonفقط داخل venv مفعّل).- التثبيت باستعمال
sudo pip install: أنت تعدّل Python الخاص بالنظام وقد تُفسد بعض الأدوات. استعمل دائمًا venv. - نسيان تفعيل الـ venv: تُثبَّت الحزمة في مكان آخر ويفشل
import requestsمعModuleNotFoundError. تحقّق باستعمالwhich python. - خلط علامات الجدولة والمسافات: الخطأ
TabErrorأوIndentationError. 4 مسافات في كل مكان.
التطبيق العملي (Lab)
يعمل تمرينك على جهاز فيه Python 3.12 ومكتبته القياسية، دون اتصال بالإنترنت (إذن لا يمكن تنفيذ pip install لحزمة بعيدة). ستقوم بما يلي:
- كتابة
/root/bonjour.py، سكربتك الأول؛ - جعله قابلًا للتنفيذ باستعمال shebang و
chmod +x؛ - كتابة
/root/version.pyالذي يقرأ الإصدار عبرsys.version_info؛ - إنشاء البيئة الافتراضية
/root/projet/.venv؛ - إثبات أنك تستعمل فعلًا
pipالخاص بهذه البيئة.
لكتابة ملف دون محرّر:
cat > /root/bonjour.py <<'EOF'
print("Marhaba, MasterLinux !")
EOF
اختبار قصير
- ما الأمر الذي يشغّل المفسّر التفاعلي على Linux؟ وعلى Windows؟
- ماذا يفعل السطر
#!/usr/bin/env python3في أعلى السكربت؟ - لماذا ننشئ بيئة افتراضية لكل مشروع؟
- لماذا نكتب
python -m pip installبدلًا منpip install؟ - ما الملف الذي يسمح بإعادة تثبيت الإصدارات نفسها بالضبط من الحزم على خادم آخر، وما المجلد الذي يجب ألّا يوضع أبدًا في Git؟
الأجوبة
python3على Linux؛ وpy(المُشغِّل) على Windows.- إنه الـ shebang: عندما يُشغَّل السكربت مباشرة (
./script.py، مع صلاحية التنفيذ)، يستعمل النظامpython3الموجود فيPATHلتنفيذه. - لكي تكون لكل مشروع إصداراته الخاصة من المكتبات، دون تعارض بين المشاريع ودون المساس بـ Python الخاص بالنظام.
- لأن
python -m pipيستعمل بالتأكيد pip الخاص بالمفسّر النشط (مفسّر الـ venv)، بينما قد يشير الأمرpipإلى Python آخر. requirements.txt(الذي ينتجهpython -m pip freeze)؛ والمجلد.venvلا يوضع أبدًا في Git.
المراجع: الدرس الرسمي لـ Python بالفرنسية (رخصة PSF). نص أصلي من MasterLinux.