النشر باستخدام twine
ارفع الحزمة إلى PyPI
النشر باستخدام twine درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
الخطوة الأخيرة
لقد أنشأتم ملفات البناء في dist/. والخطوة الأخيرة هي رفعها إلى PyPI حتى يتمكن الجميع من تثبيت حزمتكم باستخدام pip install. والأداة القياسية لذلك هي twine.
يرفع twine الملفات بأمان عبر HTTPS ويتحقق من صحة ملفات البناء قبل إرسالها.
تثبيت twine
ثبّتوه باستخدام pip install twine. إنها أداة صغيرة ومتخصصة؛ فمهمتها تقتصر على التحقق من الملفات الموجودة في dist/ ورفعها. وهي لا تنشئ أي شيء.
TestPyPI أولًا
توجد بيئة اختبار منفصلة تُسمّى TestPyPI للتدرّب على عمليات الرفع. انشروا الحزمة هناك أولًا لاكتشاف المشكلات من دون التأثير في الفهرس الفعلي. تكون الأسماء والإصدارات على TestPyPI مستقلة عن PyPI.
ارفعوا الحزمة باستخدام twine upload --repository testpypi dist/*.
التحقق قبل الرفع
يتحقق الأمر twine check dist/* من أن بيانات التعريف والوصف الطويل سيُعرضان بصورة صحيحة على PyPI. شغّلوه في كل مرة؛ فقد يظهر وصف README المعطوب كنص عادي في صفحة مشروعكم.
files = ['mytool-0.1.0.tar.gz', 'mytool-0.1.0-py3-none-any.whl']
for f in files:
status = 'PASSED' if f.endswith(('.gz', '.whl')) else 'SKIP'
print('check', f, '->', status)رموز API بدلًا من كلمات المرور
صادِقوا باستخدام رمز API من حسابكم على PyPI، وليس باستخدام كلمة المرور. استخدموا __token__ اسمًا للمستخدم، والرمز الذي يبدأ بـ pypi- كلمةً للمرور. يمكن تقييد الرموز بمشروع واحد وإبطالها في أي وقت.
username = '__token__'
token = 'pypi-AgEIcHl...'
print('Username:', username)
print('Token starts with:', token[:5])
print('Never commit the token to git')تخزين بيانات الاعتماد
تجنبوا إعادة كتابة الرموز في كل مرة بتخزينها في الملف ~/.pypirc أو في متغيرات البيئة (TWINE_USERNAME وTWINE_PASSWORD). احرصوا على ألا يكون هذا الملف ضمن نظام التحكم في الإصدارات، وأن يقتصر حق قراءته عليكم.
الرفع إلى PyPI
بعد التأكد من أن كل شيء يعمل جيدًا على TestPyPI، انشروا الحزمة فعليًا باستخدام twine upload dist/*. وخلال لحظات تصبح حزمتكم قابلة للتثبيت في جميع أنحاء العالم. لا توجد طريقة للتراجع؛ فلا يمكنكم إعادة رفع الإصدار نفسه بعد حذفه.
الإصدارات غير قابلة للتغيير
لا يسمح PyPI مطلقًا بالكتابة فوق إصدار منشور. إذا اكتشفتم خطأً بعد النشر، فعليكم إصدار نسخة جديدة، برفع رقم الإصدار مثلًا. أدرجوا هذه القاعدة في سير عملكم حتى لا تواجهوا مأزقًا لاحقًا.
published = {'1.0.0', '1.0.1'}
new_version = '1.0.1'
if new_version in published:
print(new_version, 'already on PyPI - bump and rebuild')
else:
print(new_version, 'is free to upload')التحقق من التثبيت
بعد الرفع، تأكدوا من أن كل شيء يعمل: أنشئوا بيئة افتراضية جديدة ونفّذوا pip install mytool، ثم استوردوا الحزمة. يكشف التثبيت من بيئة نظيفة الملفات المفقودة وأخطاء التبعيات التي لم يكشفها البناء.
النشر الموثوق
يمكن للمشاريع الحديثة تجاوز استخدام الرموز يدويًا بالاعتماد على النشر الموثوق؛ إذ تصادق PyPI على سير عمل CI، مثل GitHub Actions، مباشرةً عبر OpenID Connect. ولا يُخزَّن أي سر طويل الأمد في أي مكان، ما يجعله أكثر أمانًا.
يظل twine مسؤولًا عن الرفع، لكن بيانات الاعتماد تكون قصيرة الأجل ويُصدرها النظام وقت التشغيل.
أتمتة الإصدارات
من الإعدادات الشائعة تشغيل عملية إصدار عند دفع وسم git مثل v1.0.0. ينشئ سير عمل CI الحزمة، ويشغّل twine check، ثم يرفعها تلقائيًا. ويصبح وضع الوسم الإجراء الوحيد الذي ينشر إصدارًا.
يحافظ هذا على اتساق الإصدارات ويزيل أخطاء الرفع اليدوي.
اختبار سريع
اختبروا معرفتكم بالنشر.
مراجعة
لقد نشرتم حزمة:
pip install twine، ثمtwine check dist/*- التدرّب على TestPyPI قبل الرفع الفعلي
- المصادقة باستخدام رمز API مقيّد النطاق (
__token__)، وليس كلمة مرور مطلقًا - ينشر الأمر
twine upload dist/*الحزمة؛ والإصدارات غير قابلة للتغيير، لذا ارفعوا رقم الإصدار لإصلاح الأخطاء - التحقق من التثبيت باستخدام
pip installمن بيئة نظيفة
الأسئلة الشائعة
هل درس «النشر باستخدام twine» مجاني؟
نعم — نص درس «النشر باستخدام twine» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «النشر باستخدام twine»؟
ارفع الحزمة إلى PyPI تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «النشر باستخدام twine»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بنية المشروع وpyproject.toml
- البناء باستخدام build
- الإصدارات والبيانات الوصفية
- النشر باستخدام twine