Template mesin fotokopi/cookiecutter untuk proyek Python baru berdasarkan panduan pengembang python ilmiah. Apa yang membuat ini berbeda dari templat lain untuk paket Python?
github.com (default), dan menambahkan dukungan Gitlab CI eksperimental sebaliknya.sp-repo-review untuk mengevaluasi repo yang ada terhadap pedoman, dengan versi webAssembly yang terintegrasi dengan panduan ini. Semua cek terkait silang. Pastikan Anda telah membaca panduan pengembangan ilmiah-python terlebih dahulu, dan mungkin menggunakannya pada satu atau dua proyek. Ini bukan contoh atau tutorial minimal. Ini adalah kumpulan alat yang berguna untuk memulai proyek baru menggunakan cookiecutter, atau untuk menyalin dalam file individual untuk proyek yang ada (dengan tangan, dari {{cookiecutter.project_name}}/ ).
Selama generasi Anda dapat memilih dari backend berikut untuk paket Anda:
Saat ini, pilihan terbaik mungkin menetas untuk proyek Python murni, dan scikit-build (seperti scikit-build-core + Pybind11 pilihan) untuk proyek biner.
Instal copier dan copier-templates-extensions . Menggunakan PIPX, itu:
pipx install copier
pipx inject copier copier-templates-extensionsSekarang, jalankan mesin fotokopi untuk menghasilkan proyek Anda:
copier copy gh:scientific-python/cookie < pkg > --trust ( <pkg> adalah jalur untuk menempatkan proyek baru. Jika mesin fotokopi sudah tua, gunakan --UNSAFE bukan --trust )
Anda akan mendapatkan pengalaman CLI yang lebih baik dengan validasi jawaban. Anda juga akan mendapatkan file .copier-answers.yml , yang akan memungkinkan Anda untuk melakukan pembaruan di masa mendatang.
CATATAN: Tambahkan
--vcs-ref=HEADuntuk mendapatkan versi terbaru alih-alih versi tag terakhir; Kepala selalu lulus tes (dan itulah yang digunakan Cookiecutter).
Pasang cookiecutter, idealnya dengan brew install cookiecutter Jika Anda menggunakan minuman, jika tidak dengan pipx install cookiecutter (atau pipx run ke perintah di bawah ini, dan lewati instalasi). Kemudian jalankan:
cookiecutter gh:scientific-python/cookieJika Anda menggunakan cookiecutter 2.2.3+, Anda akan mendapatkan deskripsi yang bagus untuk opsi seperti mesin fotokopi!
Anda juga dapat menggunakan Cruft, yang menambahkan pembaruan kemampuan untuk proyek cookiecutter. Pasang dengan pipx install cruft (atau Prepend pipx run ke perintah di bawah ini, dan lewati instalasi). Kemudian jalankan:
cruft create gh:scientific-python/cookie Periksa file pengaturan kunci, pyproject.toml , dan mungkin setup.cfg dan setup.py (contoh pybind11). Perbarui README.md . Perbarui juga dan tambahkan dokumen ke docs/ .
Ada beberapa contoh dependensi dan versi python minimum 3.9, jangan ragu untuk mengubahnya menjadi apa pun yang sebenarnya Anda butuhkan/inginkan. Ada juga struktur Backports dasar dengan contoh pengetikan kecil.
[docs] tambahan[test] ekstraAnda dapat menguji secara lokal dengan 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 Jika Anda tidak memiliki nox secara lokal, Anda dapat menggunakan PIPX, seperti pipx run nox sebagai gantinya.
Hypermodern-Python adalah proyek lain yang layak untuk dicoba dengan banyak kesamaan, seperti dokumentasi hebat untuk setiap fitur dan banyak alat yang sama yang digunakan. Ini memiliki serangkaian fitur yang sedikit berbeda, dan memiliki fokus yang lebih kuat pada tindakan GitHub - sebagian besar panduan kami dapat disesuaikan dengan sistem CI yang berbeda dengan cukup mudah jika Anda tidak ingin menggunakan GHA. Ini juga memaksa penggunaan puisi (alih -alih memiliki pilihan backend), dan tidak mendukung proyek yang dikompilasi. Saat ini membuang semua dependensi pembangunan ke dalam lingkungan bersama, menyebabkan waktu pemecahan yang lama dan peluang konflik yang tinggi. Ini juga tidak menggunakan pra-berkomitmen seperti yang dimaksudkan untuk digunakan. Ini juga memiliki sedikit kode khusus.
Banyak panduan, cookiecutter, dan repo-review dimulai sebagai bagian dari Scikit-hep. Proyek-proyek ini digabungkan, digeneralisasi, dan dikombinasikan dengan panduan NSLS-II selama KTT Pengembang Ilmiah-Python 2023.
sp-repo-review memberikan cek berdasarkan panduan pengembangan ilmiah-python di ilmiah-python/cookie untuk repo-review.
Alat ini dapat memeriksa gaya repositori. Gunakan seperti ini:
pipx run ' sp-repo-review[cli] ' < path to repository >Ini akan menghasilkan daftar hasil - tanda -tanda hijau berarti aturan ini diikuti, Red X berarti aturannya tidak. Tanda peringatan kuning berarti bahwa cek itu dilewati karena cek yang diperlukan sebelumnya gagal. Beberapa cek akan gagal, tidak apa -apa - tujuannya adalah membawa semua masalah yang mungkin menjadi perhatian Anda, bukan untuk memaksa kepatuhan dengan cek sewenang -wenang. Akhirnya mungkin ada cara untuk menandai cek seperti yang diabaikan.
Misalnya, GH101 mengharapkan semua file tindakan Anda memiliki name: bidang. Jika Anda senang dengan nama berbasis file yang Anda lihat di CI, Anda harus merasa bebas untuk mengabaikan cek ini (cukup abaikan secara visual untuk saat ini, cara untuk menentukan cek yang diabaikan kemungkinan akan ditambahkan pada akhirnya).
Semua cek disebutkan setidaknya dalam beberapa cara dalam panduan pengembangan ilmiah-python. Anda harus membacanya terlebih dahulu - jika Anda tidak berusaha mengikutinya, beberapa cek mungkin tidak berfungsi. Misalnya, pedoman yang menentukan konfigurasi pytest ditempatkan di pyproject.toml . Jika Anda menempatkannya di tempat lain, maka semua cek Pytest akan dilewati.
Ini awalnya dikembangkan untuk scikit-hep sebelum pindah ke python ilmiah.
Anda juga dapat menggunakan tindakan github:
- uses : scientific-python/cookie@<version>Atau pra-komit:
- repo : https://github.com/scientific-python/cookie
rev : <version>
hooks :
- id : sp-repo-review Jika Anda menggunakan additional_dependencies untuk menambahkan lebih banyak plugin, seperti validate-pyproject , Anda juga harus menyertakan "repo-review[cli]" untuk memastikan persyaratan CLI disertakan.
PY001 : Memiliki pyproject.tomlPY002 : memiliki file readme. (MD | RST)PY003 : Memiliki lisensi* filePY004 : memiliki folder dokumenPY005 : Memiliki folder TesPY006 : Memiliki konfigurasi pra-komitPY007 : Mendukung pelari tugas yang mudah (NOX, TOX, PIXI, dll.)PP002 : Memiliki tabel sistem bangunan yang tepatPP003 : tidak mencantumkan roda sebagai build-depPP004 : tidak membutuhkan python topi atasPP301 : Memiliki Pytest di PyprojectPP302 : Menetapkan Pytest Minimum ke setidaknya 6PP303 : Mengatur jalur ujiPP304 : Menetapkan level log di PytestPP305 : Menentukan xfail_strictPP306 : Menentukan konfigurasi yang ketatPP307 : Menentukan penanda yang ketatPP308 : Menentukan ringkasan pytest yang bergunaPP309 : Peringatan filter yang ditentukanRTD100 : Menggunakan ReadThedocs (Pyproject Config)RTD101 : Anda harus mengatur nomor versi RTD ke 2RTD102 : Anda harus mengatur gambar Build RTDRTD103 : Anda harus mengatur versi RTD PythonGH100 : Memiliki Konfigurasi Tindakan GitHubGH101 : memiliki nama yang bagusGH102 : Kanselus otomatis pada PR berulangGH103 : Setidaknya satu alur kerja dengan pemicu pengiriman manualGH104 : Gunakan nama unik untuk unggahan-artefakGH200 : Dipelihara oleh DependabotGH210 : Mempertahankan versi aksi gitub dengan DependabotGH211 : Jangan pin tindakan inti sebagai versi utamaGH212 : Membutuhkan Pengelompokan Pembaruan GHAMY100 : Menggunakan mypy (konfigurasi pyproject)MY101 : Mode ketat mypyMY102 : mypy show_error_codes sudah usangMY103 : mypy memperingatkan tidak terjangkauMY104 : mypy memungkinkan pengabaian tanpa kodeMY105 : mypy memungkinkan redundan-exprMY106 : mypy memungkinkan truthy-boolPC100 : Memiliki pra-komit-hooksPC110 : Menggunakan Black atau Ruff-FormatPC111 : Menggunakan DOC yang HitamPC140 : Menggunakan pemeriksa jenisPC160 : Menggunakan pemeriksa ejaanPC170 : Menggunakan kait pygrep (hanya diperlukan jika hadir pertama)PC180 : Menggunakan Formatter MarkdownPC190 : Menggunakan RuffPC191 : Ruff Show Perbaikan Jika perbaikan diaktifkanPC901 : Pesan CI pra-komit khususRF001 : Memiliki Ruff ConfigRF002 : Versi target harus ditetapkanRF003 : Direktori SRC tidak perlu ditentukan lagi (0,6+)RF101 : Bugbear harus dipilihRF102 : Isort harus dipilihRF103 : Pyupgrade harus dipilihRF201 : Hindari menggunakan pengaturan konfigurasi yang sudah usangRF202 : Gunakan (baru) bagian konfigurasi serat