ديف أوبس

تحزيم وتوزيع تطبيقات بايثون

كيفية تحزيم وتوزيع تطبيقات بايثون: دليل شامل للمطورين

تُعد عملية تحزيم وتوزيع تطبيقات بايثون من المهام الحيوية التي يجب أن يتقنها كل مطور يسعى لجعل تطبيقاته قابلة للاستخدام خارج بيئة التطوير المحلية. هذه الخطوة تمثل حلقة الوصل بين عملية التطوير ومرحلة النشر، سواء كانت الوجهة النهائية خادم إنتاج، أو حاسوب مستخدم نهائي، أو متجر تطبيقات. يتضمن هذا العمل العديد من الجوانب الفنية التي تحتاج إلى فَهمٍ عميق لأدوات بايثون، وهيكل الحزم، وآليات التوزيع.

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


1. أهمية تحزيم وتوزيع التطبيقات في بايثون

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

تشمل أهمية هذه العملية:

  • تسهيل نشر التطبيق على أجهزة أخرى.

  • تقليل فرص الخطأ أثناء التثبيت.

  • إدارة التبعيات المطلوبة للتشغيل بشكل آلي.

  • تحسين إمكانية التحديث والدعم المستقبلي.

  • الامتثال لمتطلبات بيئات الإنتاج أو النشر التجاري.


2. التحضير لتحزيم التطبيق

قبل الشروع في عملية التحزيم، يجب التأكد من أن المشروع منظم بطريقة قياسية. الهيكلية النموذجية لمشروع بايثون قد تكون على الشكل التالي:

arduino
my_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:

python
from 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:

ini
include README.md include LICENSE

4. إنشاء حزمة قابلة للتوزيع

بعد تجهيز الملفات، تأتي مرحلة إنشاء حزمة التوزيع باستخدام الأدوات التالية:

تثبيت الأدوات اللازمة:

bash
pip install setuptools wheel

إنشاء الحزمة:

bash
python 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:

bash
pip install twine

رفع الحزمة:

bash
twine upload dist/*

سيطلب منك إدخال بيانات الدخول الخاصة بـ PyPI، وبعدها ستكون الحزمة متاحة للتثبيت عبر pip install my_app.


6. إنشاء حزمة تنفيذية (Standalone Executable)

إذا كنت تريد توزيع تطبيقك على مستخدمين لا يمتلكون بيئة بايثون، فيجب تحويل التطبيق إلى ملف تنفيذي مستقل باستخدام أدوات مثل:

PyInstaller

bash
pip install pyinstaller

ثم:

bash
pyinstaller --onefile my_app/main.py

سينتج ملف تنفيذي في مجلد dist/ يمكن تشغيله مباشرة على النظام المستهدف (Windows, Linux, أو macOS).

cx_Freeze

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


7. إنشاء Docker Image للتوزيع في بيئات سيرفرية

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

مثال على Dockerfile:

dockerfile
FROM python:3.10-slim WORKDIR /app COPY . /app RUN pip install --no-cache-dir -r requirements.txt CMD ["python", "my_app/core.py"]

إنشاء الصورة:

bash
docker build -t my_app_image .

تشغيل التطبيق:

bash
docker run --rm my_app_image

8. إدارة التبعيات باستخدام poetry

poetry أداة حديثة توفر بديلاً محدثًا لـ setuptools و pip في آنٍ واحد. تقدم إدارة تلقائية للإصدار والتبعيات.

تثبيت poetry:

bash
pip install poetry

تهيئة مشروع:

bash
poetry init

إضافة تبعيات:

bash
poetry add requests

إنشاء الحزمة:

bash
poetry build

نشر الحزمة:

bash
poetry publish --build

9. أفضل الممارسات في تحزيم وتوزيع تطبيقات بايثون

الممارسة الفائدة
الالتزام ببنية المشروع الموحدة يسهل القراءة والصيانة
استخدام virtualenv عزل التبعيات بين المشاريع
تحديد إصدارات التبعيات بدقة تجنب المشكلات الناتجة عن التحديثات
استخدام Git مع أدوات CI/CD تسهيل الأتمتة والنشر
كتابة توثيق شامل تسهيل الفهم على المستخدم النهائي
اختبار الحزمة محليًا قبل التوزيع تقليل فرص الفشل عند النشر

10. مقارنة بين أدوات التحزيم

الأداة الوظيفة الاستخدام الأساسي
setuptools تحزيم التطبيقات وإنشاء الحزم النشر إلى PyPI
wheel إنشاء ملفات .whl لتثبيت أسرع التوزيع المحلي والعالمي
twine رفع الحزم إلى PyPI التوزيع عبر الإنترنت
PyInstaller إنشاء ملفات تنفيذية توزيع التطبيق للمستخدم النهائي
poetry إدارة المشروع والتبعيات مشاريع حديثة ومتكاملة
Docker تشغيل الحزمة في بيئة موحدة تطبيقات السيرفر والسحابة

11. التحقق من الحزمة قبل النشر

قبل نشر الحزمة، من الضروري اختبارها كما يفعل أي مستخدم:

  1. إنشاء بيئة جديدة:

bash
python -m venv test_env source test_env/bin/activate
  1. تثبيت الحزمة من ملف wheel:

bash
pip install dist/my_app-1.0.0-py3-none-any.whl
  1. التحقق من عمل التطبيق:

bash
python -m my_app

12. توزيع الحزمة ضمن بيئة خاصة (In-House)

إذا كانت الحزمة موجهة لفريق داخلي أو لعميل محدد، يمكن استخدام مستودع محلي عبر أدوات مثل:

  • devpi

  • Nexus Repository

  • GitLab Package Registry

تُتيح هذه الأدوات تحكماً أكبر على مستوى التوزيع وإدارة الإصدارات.


13. التوقيع الرقمي للحزم

لضمان سلامة الحزم ومنع التلاعب بها أثناء النقل، يُوصى بتوقيع الحزم باستخدام GPG.

مثال:

bash
gpg --detach-sign -a dist/my_app-1.0.0.tar.gz twine upload dist/* --sign

14. إنشاء حزم بايثون لمنصات أخرى

إذا كنت تستهدف أنظمة تشغيل متعددة، تأكد من:

  • استخدام تبعيات تدعم جميع المنصات المستهدفة.

  • تجنب الاعتماد على ملفات نظام محلية أو مسارات ثابتة.

  • اختبار الحزمة على Windows, Linux, وmacOS إذا أمكن.


15. مصادر موثوقة ومراجع


الكلمات المفتاحية

تحزيم تطبيقات بايثون, توزيع برامج بايثون, setup.py, PyInstaller, poetry, wheel, setuptools, twine, Docker بايثون, نشر تطبيقات بايثون, إنشاء ملف تنفيذي بايثون, PyPI, متطلبات التثبيت بايثون, إدارة التبعيات بايثون