كيفية تحزيم وتوزيع تطبيقات بايثون: دليل شامل للمطورين
تُعد عملية تحزيم وتوزيع تطبيقات بايثون من المهام الحيوية التي يجب أن يتقنها كل مطور يسعى لجعل تطبيقاته قابلة للاستخدام خارج بيئة التطوير المحلية. هذه الخطوة تمثل حلقة الوصل بين عملية التطوير ومرحلة النشر، سواء كانت الوجهة النهائية خادم إنتاج، أو حاسوب مستخدم نهائي، أو متجر تطبيقات. يتضمن هذا العمل العديد من الجوانب الفنية التي تحتاج إلى فَهمٍ عميق لأدوات بايثون، وهيكل الحزم، وآليات التوزيع.
في هذا المقال، سيتم التعمق في كل ما يتعلق بتحزيم وتوزيع تطبيقات بايثون، ابتداءً من فهم البنية الأساسية للحزم، وصولاً إلى طرق التحزيم المتعددة، وأدوات التوزيع الأكثر استخداماً، مع تسليط الضوء على أفضل الممارسات.
1. أهمية تحزيم وتوزيع التطبيقات في بايثون
تحزيم التطبيقات يعني جمع الكود المصدري والملفات المرافقة في صيغة منظمة قابلة للتنصيب أو التشغيل على أنظمة مختلفة. أما التوزيع، فهو جعل هذا الحزم متاحة للاستخدام من قبل الآخرين.
تشمل أهمية هذه العملية:
-
تسهيل نشر التطبيق على أجهزة أخرى.
-
تقليل فرص الخطأ أثناء التثبيت.
-
إدارة التبعيات المطلوبة للتشغيل بشكل آلي.
-
تحسين إمكانية التحديث والدعم المستقبلي.
-
الامتثال لمتطلبات بيئات الإنتاج أو النشر التجاري.
2. التحضير لتحزيم التطبيق
قبل الشروع في عملية التحزيم، يجب التأكد من أن المشروع منظم بطريقة قياسية. الهيكلية النموذجية لمشروع بايثون قد تكون على الشكل التالي:
arduinomy_app/ ├── my_app/ │ ├── __init__.py │ ├── core.py │ └── utils.py ├── tests/ │ └── test_core.py ├── README.md ├── LICENSE ├── requirements.txt ├── setup.py └── MANIFEST.in
الملفات الأساسية:
-
__init__.py: يجعل المجلد حزمة بايثون. -
setup.py: يحتوي على معلومات التحزيم باستخدام setuptools. -
requirements.txt: يحتوي على قائمة التبعيات. -
MANIFEST.in: يستخدم لإدراج ملفات غير بايثونية ضمن الحزمة (مثل README أو ملفات التكوين).
3. استخدام setuptools لتحزيم التطبيقات
تُعد مكتبة setuptools الأكثر استخدامًا لتحزيم التطبيقات. تحتوي على أدوات متقدمة تتيح إنشاء حزم جاهزة للتثبيت على أي نظام.
مثال على setup.py:
pythonfrom setuptools import setup, find_packages
setup(
name='my_app',
version='1.0.0',
description='تطبيق بايثون للتوضيح',
long_description=open('README.md').read(),
long_description_content_type='text/markdown',
author='اسم المطور',
author_email='[email protected]',
url='https://github.com/username/my_app',
packages=find_packages(),
install_requires=[
'requests>=2.20.0',
'numpy>=1.19.0'
],
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
],
python_requires='>=3.6',
include_package_data=True,
)
ملف MANIFEST.in:
iniinclude README.md include LICENSE
4. إنشاء حزمة قابلة للتوزيع
بعد تجهيز الملفات، تأتي مرحلة إنشاء حزمة التوزيع باستخدام الأدوات التالية:
تثبيت الأدوات اللازمة:
bashpip install setuptools wheel
إنشاء الحزمة:
bashpython setup.py sdist bdist_wheel
سينتج مجلد dist/ يحتوي على ملفات مثل:
-
my_app-1.0.0-py3-none-any.whl(حزمة wheel) -
my_app-1.0.0.tar.gz(حزمة المصدر)
5. توزيع التطبيق عبر PyPI
لنشر الحزمة على مستودع PyPI (Python Package Index)، يجب أولاً إنشاء حساب على https://pypi.org. ثم استخدام أداة twine.
تثبيت twine:
bashpip install twine
رفع الحزمة:
bashtwine upload dist/*
سيطلب منك إدخال بيانات الدخول الخاصة بـ PyPI، وبعدها ستكون الحزمة متاحة للتثبيت عبر pip install my_app.
6. إنشاء حزمة تنفيذية (Standalone Executable)
إذا كنت تريد توزيع تطبيقك على مستخدمين لا يمتلكون بيئة بايثون، فيجب تحويل التطبيق إلى ملف تنفيذي مستقل باستخدام أدوات مثل:
PyInstaller
bashpip install pyinstaller
ثم:
bashpyinstaller --onefile my_app/main.py
سينتج ملف تنفيذي في مجلد dist/ يمكن تشغيله مباشرة على النظام المستهدف (Windows, Linux, أو macOS).
cx_Freeze
بديل آخر مفيد لإنشاء حزم تنفيذية، خاصة في بيئات سطح المكتب. يدعم إضافة الأيقونات وملفات التكوين بسهولة.
7. إنشاء Docker Image للتوزيع في بيئات سيرفرية
إذا كان التطبيق جزءًا من خدمة ويب أو يُراد تشغيله في بيئة افتراضية موحدة، فالحل المثالي هو استخدام Docker.
مثال على Dockerfile:
dockerfileFROM python:3.10-slim WORKDIR /app COPY . /app RUN pip install --no-cache-dir -r requirements.txt CMD ["python", "my_app/core.py"]
إنشاء الصورة:
bashdocker build -t my_app_image .
تشغيل التطبيق:
bashdocker run --rm my_app_image
8. إدارة التبعيات باستخدام poetry
poetry أداة حديثة توفر بديلاً محدثًا لـ setuptools و pip في آنٍ واحد. تقدم إدارة تلقائية للإصدار والتبعيات.
تثبيت poetry:
bashpip install poetry
تهيئة مشروع:
bashpoetry init
إضافة تبعيات:
bashpoetry add requests
إنشاء الحزمة:
bashpoetry build
نشر الحزمة:
bashpoetry publish --build
9. أفضل الممارسات في تحزيم وتوزيع تطبيقات بايثون
| الممارسة | الفائدة |
|---|---|
| الالتزام ببنية المشروع الموحدة | يسهل القراءة والصيانة |
استخدام virtualenv |
عزل التبعيات بين المشاريع |
| تحديد إصدارات التبعيات بدقة | تجنب المشكلات الناتجة عن التحديثات |
| استخدام Git مع أدوات CI/CD | تسهيل الأتمتة والنشر |
| كتابة توثيق شامل | تسهيل الفهم على المستخدم النهائي |
| اختبار الحزمة محليًا قبل التوزيع | تقليل فرص الفشل عند النشر |
10. مقارنة بين أدوات التحزيم
| الأداة | الوظيفة | الاستخدام الأساسي |
|---|---|---|
| setuptools | تحزيم التطبيقات وإنشاء الحزم | النشر إلى PyPI |
| wheel | إنشاء ملفات .whl لتثبيت أسرع | التوزيع المحلي والعالمي |
| twine | رفع الحزم إلى PyPI | التوزيع عبر الإنترنت |
| PyInstaller | إنشاء ملفات تنفيذية | توزيع التطبيق للمستخدم النهائي |
| poetry | إدارة المشروع والتبعيات | مشاريع حديثة ومتكاملة |
| Docker | تشغيل الحزمة في بيئة موحدة | تطبيقات السيرفر والسحابة |
11. التحقق من الحزمة قبل النشر
قبل نشر الحزمة، من الضروري اختبارها كما يفعل أي مستخدم:
-
إنشاء بيئة جديدة:
bashpython -m venv test_env
source test_env/bin/activate
-
تثبيت الحزمة من ملف wheel:
bashpip install dist/my_app-1.0.0-py3-none-any.whl
-
التحقق من عمل التطبيق:
bashpython -m my_app
12. توزيع الحزمة ضمن بيئة خاصة (In-House)
إذا كانت الحزمة موجهة لفريق داخلي أو لعميل محدد، يمكن استخدام مستودع محلي عبر أدوات مثل:
-
devpi
-
Nexus Repository
-
GitLab Package Registry
تُتيح هذه الأدوات تحكماً أكبر على مستوى التوزيع وإدارة الإصدارات.
13. التوقيع الرقمي للحزم
لضمان سلامة الحزم ومنع التلاعب بها أثناء النقل، يُوصى بتوقيع الحزم باستخدام GPG.
مثال:
bashgpg --detach-sign -a dist/my_app-1.0.0.tar.gz twine upload dist/* --sign
14. إنشاء حزم بايثون لمنصات أخرى
إذا كنت تستهدف أنظمة تشغيل متعددة، تأكد من:
-
استخدام تبعيات تدعم جميع المنصات المستهدفة.
-
تجنب الاعتماد على ملفات نظام محلية أو مسارات ثابتة.
-
اختبار الحزمة على Windows, Linux, وmacOS إذا أمكن.
15. مصادر موثوقة ومراجع
-
Python Packaging Authority – https://packaging.python.org
-
PyPA Sample Project – https://github.com/pypa/sampleproject
الكلمات المفتاحية
تحزيم تطبيقات بايثون, توزيع برامج بايثون, setup.py, PyInstaller, poetry, wheel, setuptools, twine, Docker بايثون, نشر تطبيقات بايثون, إنشاء ملف تنفيذي بايثون, PyPI, متطلبات التثبيت بايثون, إدارة التبعيات بايثون

