قالب COPIER/CookieCutter لمشاريع Python الجديدة بناءً على دليل مطور Python العلمي. ما الذي يجعل هذا مختلفًا عن القوالب الأخرى لحزم بيثون؟
github.com (الافتراضي) ، ويضيف دعم Gitlab CI التجريبي خلاف ذلك.sp-repo-review لتقييم إعادة التدوينات الحالية مقابل الإرشادات ، مع إصدار نسخة ويب مع الدليل. جميع الشيكات مترابطة. تأكد من أنك قد قرأت دليل تطوير Python العلمي أولاً ، وربما استخدمتها في مشروع أو اثنين. هذا ليس مثالًا أو تعليميًا أدنى. إنها مجموعة من الأدوات المفيدة لبدء مشروع جديد باستخدام cookieCutter ، أو للنسخ في الملفات الفردية لمشروع موجود (باليد ، من {{cookiecutter.project_name}}/ ).
أثناء الجيل ، يمكنك الاختيار من بين الخلفية التالية للحزمة الخاصة بك:
حاليًا ، من المحتمل أن يكون الخيار الأفضل هو تفريخ مشاريع Python Pure ، وبناء Scikit (مثل اختيار Scikit-Build-Core + Pybind11) للمشاريع الثنائية.
تثبيت copier و copier-templates-extensions . باستخدام PIPX ، هذا:
pipx install copier
pipx inject copier copier-templates-extensionsالآن ، قم بتشغيل COLIER لإنشاء مشروعك:
copier copy gh:scientific-python/cookie < pkg > --trust ( <pkg> هو الطريق لوضع المشروع الجديد. إذا كان النسخ قديمًا ، فاستخدم --UNSAFE بدلاً من --trust )
ستحصل على تجربة CLI أجمل مع التحقق من الإجابة. ستحصل أيضًا على ملف .copier-answers.yml ، والذي سيسمح لك بإجراء التحديثات في المستقبل.
ملاحظة: إضافة-
--vcs-ref=HEADللحصول على أحدث إصدار بدلاً من الإصدار الأخير الموسومة ؛ يمر الرأس دائمًا الاختبارات (وهو ما يستخدمه CookieCutter).
قم بتثبيت cookieCutter ، من الناحية المثالية مع brew install cookiecutter إذا كنت تستخدم Brew ، وإلا مع pipx install cookiecutter (أو إعداد pipx run إلى الأمر أدناه ، وتخطي التثبيت). ثم قم بالتشغيل:
cookiecutter gh:scientific-python/cookieإذا كنت تستخدم CookieCutter 2.2.3+ ، فستحصل على أوصاف لطيفة للخيارات مثل Copier!
يمكنك أيضًا استخدام Cruft ، والذي يضيف تحديث القدرة إلى مشاريع CookieCutter. قم بالتثبيت باستخدام pipx install cruft (أو تشغيل Pipx pipx run إلى الأمر أدناه ، وتخطي التثبيت). ثم قم بالتشغيل:
cruft create gh:scientific-python/cookie تحقق من ملفات إعداد المفاتيح ، pyproject.toml ، وربما setup.cfg و setup.py (مثال pybind11). تحديث README.md . أيضا تحديث وإضافة مستندات إلى docs/ .
هناك بعض الأمثلة على التبعيات وإصدار Python الحد الأدنى من 3.9 ، لا تتردد في تغييره إلى كل ما تحتاجه/تريده بالفعل. هناك أيضًا بنية عوامل خلفية أساسية مع مثال على الكتابة الصغيرة.
[docs] إضافية[test] إضافييمكنك الاختبار محليًا باستخدام أكاسيد النيتروجين:
# See all commands
nox -l
# Run a specific check
nox -s "lint(scikit-build)"
# Run a noxfile command on the project noxfile
nox -s "nox(hatch)" -- docs إذا لم يكن لديك nox محليًا ، فيمكنك استخدام PIPX ، مثل pipx run nox بدلاً من ذلك.
يعد Hypermodern-Python مشروعًا آخر يستحق التحقق من العديد من أوجه التشابه ، مثل الوثائق الرائعة لكل ميزة والعديد من نفس الأدوات المستخدمة. إنه يحتوي على مجموعة مختلفة قليلاً من الميزات ، ولديه تركيز أقوى على إجراءات GitHub - يمكن تكييف معظم دليلنا مع نظام CI مختلف بسهولة إلى حد ما إذا كنت لا ترغب في استخدام GHA. كما أنه يفرض استخدام الشعر (بدلاً من اختيار الخلفية) ، ولا يدعم المشاريع المترجمة. وهي تتفق حاليًا على جميع تبعيات التنمية في بيئة مشتركة ، مما يسبب أوقات حل طويلة وفرصة عالية للصراعات. كما أنه لا يستخدم مسبقًا بالطريقة التي كان المقصود منها استخدامها. كما أن لديها القليل من التعليمات البرمجية المخصصة.
بدأ الكثير من الدليل و CookieCutter و Respo-Review كجزء من Scikit-Hep. تم دمج هذه المشاريع وتعميمها ودمجها مع دليل NSLS-II خلال قمة مطوري Python العلمي 2023.
يوفر sp-repo-review شيكات بناءً على دليل تطوير العلمي في Python في Scientific-Python/Cookie لإعادة مراجعة.
يمكن لهذه الأداة التحقق من نمط المستودع. استخدم مثل هذا:
pipx run ' sp-repo-review[cli] ' < path to repository >سيؤدي ذلك إلى إنتاج قائمة بالنتائج - علامات الفحص الخضراء تعني أن هذه القاعدة تتبع ، يعني Red X أن القاعدة ليست كذلك. علامة تحذير صفراء تعني أن الشيك قد تم تخطيه بسبب فشل فحص سابق مطلوب. ستفشل بعض الشيكات ، لا بأس - الهدف هو لفت انتباهك إلى جميع المشكلات الممكنة ، وليس لفرض الامتثال للشيكات التعسفية. في النهاية قد يكون هناك وسيلة لوضع علامة على الشيكات كما تم تجاهلها.
على سبيل المثال ، يتوقع GH101 أن يكون لجميع ملفات الإجراء الخاصة بك name: الحقل. إذا كنت راضيًا عن الأسماء المستندة إلى الملفات التي تراها في CI ، فيجب أن تتردد في تجاهل هذا الشيك ببساطة (فقط تجاهله في الوقت الحالي ، فمن المحتمل أن تتم إضافة شيكات تم تجاهلها في النهاية).
يتم ذكر جميع الشيكات على الأقل بطريقة ما في دليل تطوير Python العلمي. يجب أن تقرأ ذلك أولاً - إذا كنت لا تحاول متابعتها ، فقد لا تعمل بعض الشيكات. على سبيل المثال ، تحدد الإرشادات تكوين Pytest في pyproject.toml . إذا قمت بوضعه في مكان آخر ، فسيتم تخطي جميع الشيكات Pytest.
تم تطوير هذا في الأصل لـ Scikit-Hep قبل الانتقال إلى Python العلمي.
يمكنك أيضًا استخدام تصرفات github:
- uses : scientific-python/cookie@<version>أو ما قبل الالتزام:
- repo : https://github.com/scientific-python/cookie
rev : <version>
hooks :
- id : sp-repo-review إذا كنت تستخدم additional_dependencies لإضافة المزيد من المكونات الإضافية ، مثل validate-pyproject ، فيجب عليك أيضًا تضمين "repo-review[cli]" لضمان تضمين متطلبات CLI.
PY001 : لديه pyproject.tomlPY002 : لديه ملف readme. (MD | RST)PY003 : لديه ملف ترخيص*PY004 : مجلد مستنداتPY005 : مجلد الاختباراتPY006 : لديه تكوين قبل الالتزامPY007 : يدعم عداء المهام السهل (Nox ، Tox ، Pixi ، إلخ)PP002 : لديه جدول نظام بناء مناسبPP003 : لا يسرد العجلة كبناءPP004 : لا يتطلب بيثون الغطاء العلويPP301 : لديه pytest في pyprojectPP302 : يحدد الحد الأدنى من الاختبار إلى 6 على الأقلPP303 : يضبط مسارات الاختبارPP304 : يحدد مستوى السجل في PytestPP305 : يحدد xfail_strictPP306 : يحدد تكوين صارمPP307 : يحدد علامات صارمةPP308 : يحدد ملخص Pytest مفيدPP309 : تحذيرات تصفية المحددةRTD100 : يستخدم readTheDocs (تكوين pyproject)RTD101 : يجب عليك تعيين رقم إصدار RTD على 2RTD102 : عليك تعيين صورة RTD BuildRTD103 : عليك تعيين إصدار RTD PythonGH100 : لديه تكوين إجراءات githubGH101 : لديه أسماء جميلةGH102 : عانضة تلقائية على PRS المتكررةGH103 : سير عمل واحد على الأقل مع مشغل إرسال يدويGH104 : استخدم أسماء فريدة لتحميلهاGH200 : محافظة بواسطة deperabotGH210 : يحافظGH211 : لا تدل على الإجراءات الأساسية كإصدارات رئيسيةGH212 : طلب تجميع تحديث GHAMY100 : يستخدم mypy (config pyproject)MY101 : وضع mypy صارمMY102 : mypy show_error_codes تم إهمالهاMY103 : mypy تحذير لا يمكن الوصول إليهMY104 : MyPy يتيح تجاهل دون الرمزMY105 : myPy يتيح زائدة عن الحاجة إلى EXPRMY106 : mypy يمكّن البول الحقيقةPC100 : يحتوي على Hooks قبل الالتزامPC110 : يستخدم Black أو Ruff-FormatPC111 : يستخدم Blacken-DocsPC140 : يستخدم مدقق النوعPC160 : يستخدم مدقق إملائيPC170 : يستخدم السنانير Pygrep (مطلوب فقط إذا كان RST موجودًا)PC180 : يستخدم تنسيق تخفيضPC190 : يستخدم RuffPC191 : إصلاحات عرض Ruff إذا تم تمكين الإصلاحاتPC901 : رسالة مخصصة قبل الالتزام CIRF001 : لديه تكوين RuffRF002 : يجب تعيين الإصدار المستهدفRF003 : دليل SRC لا يلزم تحديده بعد الآن (0.6+)RF101 : يجب تحديد BugbearRF102 : يجب اختيار ISORTRF103 : يجب تحديد PyupgradeRF201 : تجنب استخدام إعدادات التكوين المهملةRF202 : استخدام (جديد) قسم تكوين الوبر