Menemukan Toolkit Sempurna: Menganalisis Template Proyek Python Populer

Bahan, terjemahan yang kami terbitkan hari ini, didedikasikan untuk cerita tentang alat yang digunakan untuk membuat aplikasi Python. Ini dirancang untuk para programmer yang telah meninggalkan kategori pemula, tetapi belum mencapai kategori pengembang Python berpengalaman. Bagi mereka yang ingin mulai berlatih, penulis menyarankan menggunakan Flake8 , pytest dan Sphinx dalam proyek Python yang ada . Dia juga merekomendasikan tampilan pre-commit , Black, dan Pylint . Mereka yang berencana memulai proyek baru, ia menyarankan untuk memperhatikan Puisi dan Dependabot .





Gambaran


Selalu sulit bagi saya untuk membentuk pendapat yang objektif tentang "praktik terbaik" pengembangan Python. Dalam dunia teknologi, beberapa tren populer terus muncul, seringkali tidak ada lama. Ini mempersulit ekstraksi "sinyal berguna" dari kebisingan informasi.

Alat-alat paling segar seringkali hanya bagus, sehingga bisa dikatakan, di atas kertas. Bisakah mereka benar-benar membantu programmer praktis dengan sesuatu? Atau aplikasi mereka hanya mengarah pada pengenalan sesuatu yang baru dalam proyek, efisiensi yang harus dipertahankan, yang membawa lebih banyak kesulitan daripada manfaat?

Saya tidak memiliki pemahaman yang jelas tentang apa yang sebenarnya saya anggap sebagai "praktik terbaik" pembangunan. Saya kira saya menemukan sesuatu yang bermanfaat, terutama berdasarkan bukti episodik tentang "utilitas", dan sesekali menyebutkan ini dalam percakapan. Dalam beberapa minggu terakhir, saya memutuskan untuk membereskan masalah ini. Untuk melakukan ini, saya mulai menganalisis semua templat proyek Python yang dapat saya temukan (kita berbicara tentang templat yang digunakan oleh utilitas baris perintah cookiecutter untuk membuat proyek Python berdasarkan pada mereka).

Tampak bagi saya bahwa itu sangat menarik untuk mengetahui alat bantu seperti apa yang dianggap layak oleh penulis templat untuk memasukkan alat-alat ini ke proyek Python baru yang dibuat berdasarkan template ini.

Saya menganalisis dan membandingkan 18 proyek templat paling populer (dari 76 hingga 6300 bintang di GitHub), memberikan perhatian khusus pada alat bantu apa yang mereka gunakan. Hasil analisis ini dapat ditemukan dalam tabel ini .

Di bawah ini saya ingin berbagi kesimpulan utama yang telah saya buat saat menganalisis templat populer.

Standar de facto


Alat yang dibahas dalam bagian ini termasuk dalam lebih dari setengah templat. Ini berarti bahwa mereka dianggap sebagai standar dalam sejumlah besar proyek Python nyata.

LakeFlake8


Saya telah menggunakan Flake8 selama beberapa waktu , tetapi saya tidak tahu tentang posisi dominan di bidang linting yang ditempati oleh alat ini. Saya pikir itu ada dalam semacam kompetisi, tetapi sebagian besar templat proyek menggunakannya.

Ya, ini tidak mengejutkan. Sulit untuk menentang sesuatu dengan kenyamanan mengecoh seluruh basis kode proyek dalam hitungan detik. Mereka yang ingin menggunakan pengembangan mutakhir dapat merekomendasikan melihat wemake-python-styleguide . Ini adalah sesuatu seperti "Flake8 on steroids." Alat ini mungkin berkontribusi pada transfer ke kategori alat serupa lainnya yang sudah usang (seperti Pylint).

▍Test dan coverage.py


Sebagian besar templat menggunakan pytest . Ini mengurangi penggunaan kerangka uji unittest standar. Pytest terlihat lebih menarik ketika dikombinasikan dengan racun . Itulah tepatnya yang dilakukan di sekitar setengah dari templat. Cakupan kode dengan tes paling sering diperiksa menggunakan coverage.py .

PhinSphinx


Sebagian besar templat menggunakan Sphinx untuk menghasilkan dokumentasi . Yang mengejutkan saya, MkDocs jarang digunakan untuk tujuan ini.

Sebagai hasilnya, kita dapat mengatakan bahwa jika Anda tidak menggunakan Flake8, pytest dan Sphinx dalam proyek Anda saat ini, maka Anda harus mempertimbangkan untuk memperkenalkannya.

Alat yang menjanjikan


Di bagian ini, saya telah mengumpulkan alat-alat dan teknik kerja itu, yang penggunaannya di templat menyarankan beberapa tren. Intinya adalah bahwa meskipun semua ini tidak muncul di sebagian besar templat proyek, ia ditemukan di banyak templat yang cukup baru. Jadi - semua ini patut diperhatikan.

▍Proyek.toml


Penggunaan file pyproject.tomldisarankan dalam PEP 518 . Ini adalah mekanisme modern untuk menetapkan persyaratan perakitan proyek. Ini digunakan di sebagian besar templat yang cukup muda.

▍Perjalanan


Meskipun ekosistem Python tidak bekerja dengan baik dalam hal alat yang baik untuk mengelola dependensi, saya sangat optimis bahwa Puisi bisa setara dengan npm dari dunia JavaScript di dunia Python .

Template proyek termuda (tetapi, bagaimanapun, populer) tampaknya setuju dengan ide saya ini. Benar, perlu dikatakan bahwa jika seseorang sedang mengerjakan beberapa jenis perpustakaan yang dapat ia rencanakan untuk didistribusikan melalui PyPI , maka ia masih harus menggunakan setuptools . (Perlu dicatat bahwa setelah publikasi materi ini saya diberitahu bahwa ini, tampaknya, tidak lagi menjadi masalah).

Juga, berhati-hatilah jika proyek Anda (yang sama berlaku untuk dependensi) bergantung pada Conda. Dalam hal ini, Puisi tidak akan cocok untuk Anda, karena alat ini, dalam bentuk saat ini, mengikat pengembang untuk memip dan ke virtualenv .

EpendDependabot


Dependabot secara teratur memeriksa dependensi proyek untuk keusangan dan mencoba membantu pengembang dengan secara otomatis membuka PR.

Secara pribadi, saya baru-baru ini melihat alat ini lebih sering daripada sebelumnya. Menurut saya itu adalah alat yang sangat baik, penambahan yang ke proyek mempengaruhi proyek dengan sangat positif. Dependabot membantu mengurangi risiko keamanan dengan mendorong pengembang untuk selalu memperbarui dependensi.

Sebagai hasilnya, saya menyarankan Anda untuk tidak melupakan Puisi dan Dependabot. Pertimbangkan untuk memperkenalkan alat-alat ini ke proyek Anda selanjutnya.

Rekomendasi pribadi


Analisis templat proyek memberi saya persepsi yang agak ambivalen tentang alat yang akan saya daftarkan di bagian ini. Bagaimanapun, saya ingin menggunakan bagian ini untuk membicarakannya berdasarkan pengalaman saya sendiri. Pada suatu waktu mereka sangat berguna bagi saya.

▍Sebelum berkomitmen


Bahkan jika Anda sangat disiplin - jangan buang energi Anda untuk melakukan tindakan rutin sederhana seperti kode tambahan yang dijalankan melalui linter sebelum mengirim kode ke repositori. Tugas serupa dapat dilewatkan ke Pra-komit . Dan lebih baik untuk menghabiskan energi Anda pada TDD dan pada kerja tim pada kode.

YlPintu


Meskipun Pylint dikritik karena lambat, meskipun alat ini dikritik karena fitur pengaturannya, saya dapat mengatakan bahwa itu memungkinkan saya untuk tumbuh di atas diri saya sendiri di bidang pemrograman.

Dia memberi saya instruksi spesifik pada bagian-bagian kode yang dapat saya tingkatkan, memberi tahu saya bagaimana membuat kode lebih mematuhi aturan. Untuk alat gratis, ini saja sudah sangat banyak. Karena itu, saya siap menghadapi ketidaknyamanan yang terkait dengan Pylint.

▍Hitam


Hitam di akar perdebatan tentang tempat untuk meletakkan spasi dalam kode. Ini melindungi tim kami dari pembicaraan kosong dan dari perbedaan yang tidak berarti dalam file yang disebabkan oleh pengaturan editor yang berbeda.

Dalam kasus saya, ini menerangi apa yang saya pribadi tidak suka dengan Python (kebutuhan untuk menggunakan banyak ruang). Selain itu, perlu dicatat bahwa proyek Black pada tahun 2019 bergabung dengan Python Software Foundation, yang menunjukkan keseriusan dan kualitas proyek ini.

Akibatnya, saya ingin mengatakan bahwa jika Anda masih tidak menggunakan pra-komit, Black dan Pylint - pikirkan apakah alat ini dapat menguntungkan tim Anda.

Subtotal


Dua belas dari delapan belas templat yang diselidiki dibuat menggunakan kerangka kerja juru masak . Beberapa templat di mana kerangka kerja ini tidak digunakan memiliki kualitas menarik.

Tetapi mengingat fakta bahwa juru masak adalah kerangka kerja utama untuk membuat templat proyek, mereka yang memutuskan untuk menggunakan templat yang tidak menggunakan juru masak harus memiliki alasan yang sangat baik untuk ini. Keputusan seperti itu harus dibenarkan dengan sangat baik.

Mereka yang mencari templat untuk proyek mereka harus memilih templat yang paling cocok dengan pandangan mereka sendiri. Jika Anda, ketika membuat proyek sesuai dengan templat tertentu, terus-menerus harus mengkonfigurasi ulang dengan cara yang sama, pikirkan cara bercabang templat tersebut dan memperbaikinya, terinspirasi oleh contoh templat dari daftar saya.

Dan jika Anda tertarik pada petualangan - buat template Anda sendiri dari awal. Cookiecutter adalah fitur hebat dari ekosistem Python, dan proses sederhana membuat templat Jinja memungkinkan Anda melakukan sesuatu sendiri dengan cepat dan mudah.

Bonus: Rekomendasi Templat


J Django


Bersama dengan templat Django paling populer, pertimbangkan untuk menggunakan templat wemake-django . Ini memberi kesan produk yang dipikirkan secara mendalam.

▍ Pemrosesan dan analisis data


Dalam sebagian besar proyek yang bertujuan memproses dan menganalisis data, templat Ilmu Data Cookiecutter berguna . Namun, para ilmuwan data juga harus melihat Kedro .

Templat ini memperluas Ilmu Data Cookiecutter dengan mekanisme untuk membuat pipa pemrosesan data terstandarisasi. Ini mendukung memuat dan menyimpan data dan model. Fitur-fitur ini sangat mungkin untuk dapat menemukan aplikasi yang layak di proyek Anda berikutnya.

Di sini saya juga ingin mengucapkan terima kasih kepada para pembuat template shablona untuk menyiapkan dokumentasi yang sangat berkualitas tinggi. Ini dapat bermanfaat bagi Anda bahkan jika Anda akhirnya memilih sesuatu yang lain.

▍ Template tujuan umum


Template tujuan umum mana yang harus dipilih tergantung pada apa yang akan Anda kembangkan berdasarkan template ini - pustaka atau aplikasi reguler. Tapi, memilih template seperti itu, bersama dengan proyek-proyek paling populer dari jenis ini, saya akan sangat hati-hati melihat Template Python Jace .

Ini bukan pola yang terkenal, tapi saya suka fakta bahwa ia memiliki Puisi, isort , Hitam, pylint, dan mypy .

PyScaffold adalah salah satu templat berbasis non-cookiecutter yang paling populer. Ini memiliki banyak ekstensi (misalnya, untuk Django, dan untuk proyek-proyek Ilmu Data ). Itu juga mengunduh nomor versi dari GitHub menggunakan setuptools-scm. Lebih lanjut, ini adalah salah satu dari beberapa templat yang mendukung Conda.

Berikut adalah beberapa templat yang menggunakan teknologi Tindakan GitHub:

  1. The Python Praktik Terbaik cookiecutter Template , yang, saya ingin catatan, memiliki sebagian besar alat favorit saya.
  2. Template Blueprint / Boilerplate For Python Projects , yang menurut saya cukup menarik, karena kesempatan yang diberikannya untuk menemukan masalah keamanan umum dengan Bandit, terlihat menjanjikan. Selain itu, templat ini memiliki fitur luar biasa, yang terdiri dari kenyataan bahwa pengaturan semua alat dikumpulkan dalam satu file setup.cfg.

Dan akhirnya - saya sarankan untuk melihat template wemake-python-package . Saya pikir itu layak untuk dilakukan. Khususnya - jika Anda menyukai Django-templat dari pengembang yang sama, atau jika Anda akan menggunakan wemake-python-styleguide canggih alih - alih Flake8 murni.

Ringkasan


Setelah saya menerbitkan artikel ini, saya menulis Guido van Rossum tentang hal itu.

Mungkin Anda, seperti saya, akan tertarik pada komentarnya . Dia mengatakan bahwa saya lupa tentang mypy, dan lebih mudah untuk bekerja bukan dengan Sphinx, tetapi dengan Markdown. Mengenai Hitam, ia mencatat bahwa alat ini dinilai terlalu tinggi dan hanya dapat menguntungkan jika anggota tim banyak berdebat tentang gaya. Menurutnya, mereka yang menggunakan Flake8 tidak perlu Pylint. Dia belum pernah mendengar tentang Puisi dan Dependabot. Selain itu, ia menyarankan menggunakan solusi CI tertentu, seperti Travis-CI, untuk menjalankan tes.

Pembaca yang budiman! Template proyek Python apa yang Anda gunakan?


All Articles