كيفية استخدام GitHub كخادم PyPi

كنت أبحث عن خادم PyPi Python Package خاص مستضاف ، يستخدم بيانات اعتماد يمتلكها الفريق بالفعل (مثل GitHub).

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

لم أرغب في إجبار الفريق على إنشاء حسابات مع مزود آخر. لديهم بالفعل حسابات Active Directory و GitHub. إنه مصدر إزعاج لهم ويضع عبئًا على الحكم بالنسبة لي.

للأسف ، لم أجد مثل هذه الخدمة. يعد GemFury ممتازًا ولكنه لا يدعم ترخيص GitHub (على مستوى الفريق / المؤسسة) ولا يدعم Packagr ترخيص GitHub على الإطلاق. MyGet ممتاز أيضًا ، فهو يسمح لي باستخدام ترخيص GitHub ، لكنه لا يستضيف حزم Python. يحتوي Azure DevOps على شيء يبدو واعدًا ، لكنه في مرحلة تجريبية خاصة في الوقت الحالي.

لحسن الحظ ، هذا ممكن باستخدام مستودعات Git السحابية مثل GitHub و GitLab و BitBucket.

يمكن لـ Pip تثبيت الحزم من Git

لقد استضفت حزمة Python على GitHub (python_world) ، والتي يمكنك تثبيتها باستخدام الأمر التالي (تأكد من أنك تثق بي قبل تشغيل هذا الأمر وتثبيت الكود الخاص بي على جهاز الكمبيوتر الخاص بك).

pip install git+//github.com/ceddlyburge/python_world#egg=python_world

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

هذا المستودع عام ، لكنه يعمل بنفس الطريقة مع الريبو الخاص ، طالما لديك الإذن. لا يوجد سحر خاص (إنها حزمة Vanilla Python) ويقوم Setup.py بمعظم العمل كالمعتاد.

إذا كنت جديدًا في إنشاء حزم Python ، فإن البرنامج التعليمي Packaging Python Projects يستحق قراءة سريعة.

يمكن لـ Setuptools أيضًا تثبيت التبعيات من Git

Setuptools هي الطريقة التي ينشئ بها معظم الأشخاص حزم Python.

لقد استضفت حزمة أخرى على GitHub python_hello ، والتي تعتمد على python_world. (أنا متأكد من أنه يمكنك رؤية إلى أين يتجه هذا.)

فيما يلي وحدات البت ذات الصلة من setup.py. install_requiresيحدد هذا python_worldالتبعية المطلوبة ويخبر Setuptools بمكان العثور عليه.

install_requires=[ '[email protected]+//github.com/ceddlyburge/python_world#egg=python_world-0.0.1', ]

يمكنك تثبيت هذه الحزمة باستخدام الأمر أدناه. سيقوم أيضًا بتنزيل python_worldالحزمة التابعة .

pip install git+//github.com/ceddlyburge/python_hello#egg=python_hello

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

بيئات بايثون

كما يعلم كل من استخدم Python بدون بيئة ، توفر البيئات الكثير من الإحباط والوقت الضائع. لذلك نحن بحاجة لدعم هؤلاء.

لقد قمت بإنشاء repo (use-hello-world) الذي يعرف python_helloبأنه تبعية في requirements.txt لـ Virtualenv و environment.yml لـ Conda.

إذا قمت بتنزيل الريبو ، فيمكنك تثبيت التبعيات في Virtualenv باستخدام الأمر التالي.

pip install -r requirements.txt

إذا كنت تستخدم conda ، فيمكنك استخدام هذا الأمر:

conda env create -n use-hello-world

مؤشر PyPi

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

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

لإصلاح ذلك يمكننا إعداد فهرس PyPi الذي يتوافق مع Pep 503. هذه المواصفات بسيطة للغاية ، ولقد قمت للتو بإنشاء الفهرس يدويًا. إذا أصبح هذا مرهقًا جدًا ، يمكنني إنشاؤه من واجهة برمجة تطبيقات GitHub.

لقد أنشأت فهرس PyPi هذا باستخدام صفحات GitHub. هناك أشياء مكافئة لـ GitLab و BitBucket. يمكنك أن ترى أن الكود المصدري بسيط للغاية. تكون مواقع صفحات GitHub عامة دائمًا (وربما لا توجد معلومات حساسة في فهرسك). ومع ذلك ، إذا كنت تريد أن تكون خاصة ، فيمكنك استخدام خدمة مثل PrivateHub.

شيء واحد يجب البحث عنه هو تطبيع الاسم للمواصفات. يتطلب هذا وجود python_helloمعلومات الحزمة في python-hello/index.html(لاحظ التغيير من شرطة سفلية إلى شرطة).

الآن بعد أن أصبح لدينا خادم PyPi ، يمكننا تثبيت الحزم باستخدام الأمر أدناه.

pip install python_hello --extra-index-url //ceddlyburge.github.io/python-package-server/

حتى تتمكن من رؤية هذا يعمل مع البيئات ، قمت بإنشاء ريبو آخر (use_hello_world_from_server) يحدد python_helloالتبعية باستخدام فهرس PyPi هذا بدلاً من روابط GitHub المباشرة. إذا كنت تحاول ذلك مع Conda ، فإن الإصدار> 4.4 مطلوب.

في هذه المرحلة ، يمكننا العودة وإزالة رابط Git المباشر في install_requires in setup.py من python_hello (حيث سيتمكن Setuptools من العثور عليه من خادمنا).

الاستنتاجات

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

تلميحات ونصائح

يمكن أن يساعد تقديم الفهرس محليًا في استكشاف المشكلات وإصلاحها (مثل تسوية الاسم). من السهل معرفة الطلبات التي يتم إجراؤها. يمكنك استخدام خادم HTTP الذي يحمل في ثناياه عوامل من أجل هذا ( python -m Http.Server -8000). قادني هذا إلى اكتشاف أنه pip searchيستخدم postالطلبات ، لذلك لن يعمل مع صفحات GitHub.

يمكنك الجري python setup.py -installللتحقق من حزم النقطة محليًا ، قبل دفعها إلى Git.