เทมเพลตเครื่องถ่ายเอกสาร/cookiecutter สำหรับโครงการ Python ใหม่ตามคู่มือนักพัฒนา Python Scientific อะไรทำให้สิ่งนี้แตกต่างจากเทมเพลตอื่น ๆ สำหรับแพ็คเกจ Python?
github.com (ค่าเริ่มต้น) และเพิ่มการสนับสนุน Gitlab CI ทดลองเป็นอย่างอื่นsp-repo-review เพื่อประเมิน repos ที่มีอยู่กับแนวทางด้วยเวอร์ชัน WebAssembly ที่รวมเข้ากับคู่มือ ตรวจสอบทั้งหมดข้ามลิงค์ ตรวจสอบให้แน่ใจว่าคุณได้อ่านคู่มือการพัฒนาทางวิทยาศาสตร์ Python ก่อนและอาจใช้พวกเขาในโครงการหรือสองโครงการ นี่ ไม่ใช่ ตัวอย่างน้อยที่สุดหรือการสอน มันเป็นชุดของเครื่องมือที่มีประโยชน์สำหรับการเริ่มต้นโครงการใหม่โดยใช้ CookieCutter หรือสำหรับการคัดลอกในแต่ละไฟล์สำหรับโครงการที่มีอยู่ (ด้วยมือจาก {{cookiecutter.project_name}}/ )
ในระหว่างการสร้างคุณสามารถเลือกจากแบ็กเอนด์ต่อไปนี้สำหรับแพ็คเกจของคุณ:
ปัจจุบันตัวเลือกที่ดีที่สุดคือการฟักสำหรับโครงการ Pyr Python และ Scikit-Build (เช่นตัวเลือก Scikit-Build-Core + Pybind11) สำหรับโครงการไบนารี
ติดตั้ง copier และ copier-templates-extensions ใช้ pipx นั่นคือ:
pipx install copier
pipx inject copier copier-templates-extensionsตอนนี้เรียกใช้เครื่องถ่ายเอกสารเพื่อสร้างโครงการของคุณ:
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 pipx run ไปยังคำสั่งด้านล่างและข้ามการติดตั้ง) จากนั้นเรียกใช้:
cookiecutter gh:scientific-python/cookieหากคุณใช้ CookieCutter 2.2.3+ คุณจะได้รับคำอธิบายที่ดีสำหรับตัวเลือกเช่นเครื่องถ่ายเอกสาร!
นอกจากนี้คุณยังสามารถใช้ Cruft ซึ่งเพิ่มความสามารถในการอัปเดตโครงการ CookieCutter ติดตั้งด้วย pipx install cruft (หรือ pipx run ไปยังคำสั่งด้านล่างและข้ามการติดตั้ง) จากนั้นเรียกใช้:
cruft create gh:scientific-python/cookie ตรวจสอบไฟล์การตั้งค่าคีย์, pyproject.toml และ setup.cfg และ setup.py (ตัวอย่าง pybind11) อัปเดต README.md นอกจากนี้ยังอัปเดตและเพิ่มเอกสารลงใน docs/
มีตัวอย่างไม่กี่ตัวอย่างและรุ่นงูหลามขั้นต่ำ 3.9 อย่าลังเลที่จะเปลี่ยนเป็นสิ่งที่คุณต้องการ/ต้องการ นอกจากนี้ยังมีโครงสร้างพื้นฐานพื้นฐานที่มีตัวอย่างการพิมพ์เล็ก ๆ
[docs] ซ์ที่พร้อมแล้ว[test] พิเศษคุณสามารถทดสอบในพื้นที่ด้วย NOX:
# 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 และ Repo-Review เริ่มต้นจากการเป็นส่วนหนึ่งของ Scikit-Hep โครงการเหล่านี้ถูกรวมเข้าด้วยกันและรวมกับคู่มือ NSLS-II ในระหว่างการประชุมสุดยอดนักพัฒนาวิทยาศาสตร์-Python ในปี 2566
sp-repo-review ให้การตรวจสอบตามคู่มือการพัฒนาทางวิทยาศาสตร์-Python ที่ Scientific-Python/Cookie สำหรับ Repo-Review
เครื่องมือนี้สามารถตรวจสอบสไตล์ของที่เก็บ ใช้เช่นนี้:
pipx run ' sp-repo-review[cli] ' < path to repository >สิ่งนี้จะสร้างรายการผลลัพธ์ - เครื่องหมายเช็คมาร์กสีเขียวหมายความว่ามีการปฏิบัติตามกฎนี้ความหมายของ Red X หมายถึงกฎไม่ใช่ ป้ายเตือนสีเหลืองหมายความว่าเช็คถูกข้ามเนื่องจากการตรวจสอบที่ต้องการก่อนหน้านี้ล้มเหลว การตรวจสอบบางอย่างจะล้มเหลวไม่เป็นไร - เป้าหมายคือการนำปัญหาที่เป็นไปได้ทั้งหมดมาสู่ความสนใจของคุณไม่ใช่เพื่อบังคับให้ปฏิบัติตามการตรวจสอบโดยพลการ ในที่สุดอาจมีวิธีการตรวจสอบการตรวจสอบที่ถูกละเว้น
ตัวอย่างเช่น GH101 คาดว่าไฟล์การกระทำทั้งหมดของคุณจะมี name: ฟิลด์ หากคุณมีความสุขกับชื่อที่ใช้ไฟล์ที่คุณเห็นใน CI คุณควรรู้สึกอิสระที่จะเพิกเฉยต่อการตรวจสอบนี้ (เพียงแค่มองไม่เห็นมันในขณะนี้วิธีการระบุการตรวจสอบที่ถูกละเว้นจะถูกเพิ่มในที่สุด)
การตรวจสอบทั้งหมดมีการกล่าวถึงอย่างน้อยในบางวิธีในคู่มือการพัฒนาวิทยาศาสตร์-Python คุณควรอ่านก่อน - หากคุณไม่ได้พยายามติดตามพวกเขาการตรวจสอบบางอย่างอาจไม่ทำงาน ตัวอย่างเช่นแนวทางระบุการกำหนดค่า pytest จะถูกวางไว้ใน pyproject.toml หากคุณวางไว้ที่อื่นการตรวจสอบ pytest ทั้งหมดจะถูกข้าม
สิ่งนี้ได้รับการพัฒนา แต่เดิมสำหรับ Scikit-Hep ก่อนที่จะย้ายไปที่ Scientific 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 : ไม่แสดงรายการล้อเป็น build-depPP004 : ไม่ต้องการ Cap CapPP301 : มี pytest ใน pyprojectPP302 : ตั้งค่า pytest ขั้นต่ำเป็นอย่างน้อย 6PP303 : ตั้งค่าเส้นทางทดสอบPP304 : ตั้งค่าระดับบันทึกเป็น pytestPP305 : ระบุ xfail_strictPP306 : ระบุการกำหนดค่าที่เข้มงวดPP307 : ระบุเครื่องหมายที่เข้มงวดPP308 : ระบุบทสรุป pytest ที่มีประโยชน์PP309 : ระบุคำเตือนตัวกรองRTD100 : ใช้ readtheDocs (pyproject config)RTD101 : คุณต้องตั้งค่าหมายเลข RTD เป็น 2RTD102 : คุณต้องตั้งค่าภาพสร้าง RTDRTD103 : คุณต้องตั้งค่าเวอร์ชัน RTD PythonGH100 : มีการกำหนดค่าการกระทำของ gitHubGH101 : มีชื่อที่ดีGH102 : การยกเลิกอัตโนมัติบน PRS ซ้ำGH103 : เวิร์กโฟลว์อย่างน้อยหนึ่งรายการพร้อมทริกเกอร์การจัดส่งด้วยตนเองGH104 : ใช้ชื่อที่ไม่ซ้ำกันสำหรับการอัพโหลด-artifactGH200 : ดูแลรักษาโดย IndedabotGH210 : รักษาเวอร์ชันการกระทำของ GitHub ด้วย indeverbotGH211 : อย่าตรึงการกระทำหลักเป็นเวอร์ชันสำคัญGH212 : ต้องการการจัดกลุ่มอัพเดต GHAMY100 : ใช้ mypy (pyproject config)MY101 : โหมดเข้มงวด mypyMY102 : mypy show_error_codes เลิกใช้แล้วMY103 : mypy เตือนไม่สามารถเข้าถึงได้MY104 : mypy เปิดใช้งานการละเว้น-ไม่มีรหัสMY105 : mypy เปิดใช้งานซ้ำซ้อน-exprMY106 : mypy เปิดใช้งานความจริง-บูลPC100 : มีก่อนการประชุมPC110 : ใช้รูปแบบสีดำหรือสีแดงPC111 : ใช้ Blacken-DocsPC140 : ใช้ตัวตรวจสอบประเภทPC160 : ใช้ตัวตรวจสอบการสะกดคำPC170 : ใช้ hooks pygrep (จำเป็นเฉพาะในกรณีที่มีอยู่ครั้งแรก)PC180 : ใช้รูปแบบ MarkdownPC190 : ใช้ ruffPC191 : Ruff แสดงการแก้ไขหากเปิดใช้งานการแก้ไขPC901 : ข้อความ CI ที่กำหนดเองล่วงหน้าRF001 : มีการกำหนดค่า ruffRF002 : ต้องตั้งค่าเวอร์ชันเป้าหมายRF003 : ไม่จำเป็นต้องระบุไดเร็กทอรี SRC อีกต่อไป (0.6+)RF101 : ต้องเลือก BugbearRF102 : ต้องเลือก iSortRF103 : ต้องเลือก pyupgradeRF201 : หลีกเลี่ยงการใช้การตั้งค่าการกำหนดค่าที่เลิกใช้แล้วRF202 : ใช้ (ใหม่) ส่วนการกำหนดค่าผ้าสำลี