10 langkah untuk proyek Python yang sukses

Bahan, terjemahan yang kami terbitkan hari ini, dikhususkan untuk alat yang memungkinkan melengkapi proyek Python dengan pemformatan kode, pengujian, integrasi berkelanjutan dan alat analisis ketergantungan. Ini membantu mempercepat proses pengembangan, membantu meningkatkan kualitas, keseragaman, dan keamanan kode. Diasumsikan bahwa pembaca materi ini sudah memiliki beberapa pengalaman dalam pengembangan Python dan proyek Python yang dengannya, saat membaca, akan bereksperimen. Jika Anda tidak memiliki proyek seperti itu, di sini Anda dapat mempelajari cara menyiapkan lingkungan pengembangan dan membuat paket Python. Contoh-contoh yang akan diberikan di sini disiapkan menggunakan macOS dan Python 3.7.



Langkah 1. Memasang Hitam



Kode proyek harus mengikuti konvensi gaya kode. Black adalah paket Python yang secara otomatis memformat kode, membawa penampilannya ke standar PEP 8 . Hitam adalah proyek yang relatif baru, tetapi telah memperoleh lebih dari satu juta unduhan. Penggunaannya dengan cepat menjadi tanda selera yang baik dalam pengembangan Python. Ini adalah manual Hitam.

Saya, sebagai editor kode, menggunakan Atom, jadi saya menambahkan paket Python-Black ke Atom. Anda dapat mengetahui cara menginstalnya di sini . Setelah menginstal paket ini, Atom akan memformat ulang kode setelah menyimpan file.

Sementara kita berbicara tentang Black - mari kita lengkapi alat ini dengan lingkungan pengembangan mereka yang bekerja dengan kami di proyek. Akibatnya, semua orang yang bekerja di proyek akan menggunakan aturan pemformatan kode yang sama, jika tidak, permintaan tarikan mereka tidak akan diterima.

Tambahkan black==18.9b0 ke baris bebas pertama yang ditemukan dari file requirements_dev.txt dan jalankan perintah install -r requirements_dev.txt .

Hitam, secara default, menetapkan panjang baris kode menjadi 88 karakter. Beberapa panduan gaya, seperti Sphinx , membutuhkan panjang string 79 karakter. Dalam pengaturan paket Black-Atom , Anda dapat mengatur panjang garis yang diinginkan.

Sekarang kami telah memperoleh alat yang akan membantu menghemat waktu pada pemformatan kode, kami akan memikirkan cara mempercepat dan menyederhanakan pengiriman kode ke PyPI.

Langkah 2. Membuat File .pypirc


Ketika benang digunakan untuk mengirim rakitan aplikasi ke TestPyPI dan PyPI, Anda harus memasukkan informasi login secara manual. Jika Anda tidak terbiasa dengan benang, lihat bahan ini . Sekarang kita akan mengotomatiskan proses ini.

Twine dapat bekerja dengan file .pypirc , yang seharusnya ada di direktori home kami. Alat ini, membongkar data, mengambil URL, nama pengguna, dan kata sandi dari file yang diberikan.

Jadi, buat file .pypirc di direktori home Anda:

 touch ~/.pypirc 

Tambahkan teks berikut ke dalamnya:

 [distutils] index-servers =   pypi   testpypi [testpypi] repository: https://test.pypi.org/legacy username = your_username password = your_pypitest_password [pypi] username = your_username password = your_pypi_password 

Jelas bahwa di sini Anda harus memasukkan nama pengguna dan kata sandi Anda yang sebenarnya. Juga, periksa apakah file ini disimpan di direktori home, dan bukan di direktori kerja saat ini. Jika Anda ingin melindungi file ini dari pengguna lain, Anda bisa, menggunakan alat baris perintah, mengkonfigurasi izinnya:

 chmod 600 ~/.pypirc 

Sekarang paket Anda dapat dimuat ke TestPyPI menggunakan perintah berikut:

 twine upload -r testpypi dist/* 

Dalam PyPI biasa, Anda bisa memuat paket seperti ini:

 twine upload dist/* 

Setelah Anda mendapatkan file .pypirc , Anda tidak perlu lagi memasukkan nama pengguna dan kata sandi secara manual.

Sekarang mari kita tambahkan alat pengujian ke lingkungan pengembangan kami yang akan memungkinkan kami memverifikasi operasi yang benar dari paket yang kami buat.

Langkah 3. Instal dan konfigurasikan pytest



Pytest adalah pustaka yang paling populer dan mudah digunakan untuk menguji kode yang ditulis dengan Python. Dalam contoh ini, kami akan menambahkan tes sederhana ke proyek. Sekarang , jika Anda tertarik pada detail pytest, panduan pengantar yang bagus untuk alat ini.

Tambahkan detail pytest ke requirements_dev.txt :

 pytest==4.3.0 

Mari kita instal paket:

 pip install requirements_dev.txt 

Sekarang jalankan perintah berikut, yang akan memungkinkan pytest menemukan paket kami:

 pip install -e . 

Jika Anda menonaktifkan lingkungan pengembangan virtual Anda, maka Anda perlu menjalankan kedua perintah pip lagi untuk menjalankan tes.

Langkah 4. Membuat Tes


Tambahkan folder test ke direktori root proyek Anda. Tempatkan file test_your_package_name.py di dalamnya. File saya disebut test_notebookc.py . Jika nama file dimulai dengan test_ , pytest dapat secara otomatis mendeteksi file tersebut.

Saya menambahkan tes berikut ke file test_notebookc.py , yang bertujuan memeriksa apakah fungsi menampilkan nama yang benar. Ubah kode ini sehingga nama file dan fungsi yang digunakan di dalamnya cocok dengan Anda, jelaskan tes Anda sendiri di dalamnya.

 """Tests for `notebookc` package.""" import pytest from notebookc import notebookc def test_convert(capsys):   """Correct my_name argument prints"""   notebookc.convert("Jill")   captured = capsys.readouterr()   assert "Jall" in captured.out 

Apa yang sedang terjadi di sini?

Pertama-tama kita mengimpor modul kita di sini. Kemudian kita membuat fungsi yang namanya dibangun sesuai dengan template test_my_function_name . Konvensi penamaan fungsi ini memungkinkan orang lain membaca kode proyek Anda dengan cepat memahami apa yang sebenarnya sedang diuji dalam tes. Selain itu, ini diperlukan untuk paket yang membantu mengontrol cakupan kode dengan tes, yang akan kita bahas di bawah ini.

Setelah itu, kita memanggil fungsi ( convert ), memberikannya nama Jill sebagai argumen. Berikutnya - menangkap apa yang ditampilkan fungsi. Di sini perlu dikatakan bahwa fungsi yang dimaksud sangat sederhana. Dia mengambil parameter my_name dan melakukan yang berikut:

 print(f"I'll convert a notebook for you some day, {my_name}.") 

Pytest memeriksa untuk melihat apakah Jall dalam apa fungsi output. Baris ini seharusnya tidak ada di sana, karena kita melewati fungsi Jill . Berikut adalah dokumentasi terbaik di mana Anda dapat menemukan informasi tentang penyadapan output.

Jalankan tes dengan mengetik pytest di command prompt. Tes ini seharusnya gagal. Informasi kesalahan ditampilkan dalam warna merah.


Kesalahan terdeteksi selama pengujian.

Dianjurkan untuk memeriksa tes untuk kebenaran, menggambarkannya sehingga, dalam kondisi tertentu, mereka akan berakhir dengan kesalahan. Anda tidak boleh menulis tes yang hanya memberikan pesan hijau, karena jika tidak, tes tersebut mungkin tidak memeriksa apa yang ditulis untuk diverifikasi.

Setelah kami memastikan bahwa tes gagal, ubah pernyataan Jall ke Jill dan jalankan tes lagi. Sekarang seharusnya selesai dengan sukses.


Berhasil menyelesaikan tes.

Sekarang semuanya baik-baik saja. Tes ini memungkinkan Anda untuk memastikan bahwa jika seseorang melewati garis ke fungsi kami, baris ini akan jatuh ke teks yang ditampilkan fungsi ini.

Anda juga dapat menulis tes yang memeriksa fungsi tentang cara menangani data yang diteruskan ke sana. Yaitu, jika menerima data yang tipenya berbeda dari string, itu harus menyebabkan kesalahan TypeError. Berikut adalah beberapa hal bagus tentang pengecualian dan penanganan kesalahan dengan Python.

Ketika kami membuat tes sebelumnya, kami menulis kode yang mengarah pada keberhasilan penyelesaian tes. Ini disebut Test-Driven Development (TDD). TDD adalah pendekatan pemrograman terbukti yang membantu Anda menulis kode yang memiliki kesalahan lebih sedikit daripada tanpa TDD. Berikut adalah beberapa bahan TDD yang berguna.

Sekarang, sebagai latihan, cobalah menulis tes yang memeriksa fungsi convert() sehingga ketika melewatkan sesuatu yang berbeda dari string ke sana, itu akan menimbulkan kesalahan, dan menerapkan mekanisme yang sesuai untuk fungsi ini. Perhatikan bahwa bilangan bulat, daftar, dan kamus dikonversi menjadi string.

Setelah paket berhasil lulus tes, kami siap untuk mengambil keuntungan dari sistem integrasi berkelanjutan.

Langkah 5. Pendaftaran di layanan Travis CI dan konfigurasinya



Travis CI adalah "layanan web terdistribusi untuk membangun dan menguji perangkat lunak." Baru-baru ini dibeli oleh Idera . Ada sistem integrasi berkelanjutan lainnya, tetapi Travis CI adalah alat yang populer, sumber terbuka, dan terdokumentasi dengan baik, jadi kami akan menggunakannya.

Travis CI memungkinkan Anda untuk mengintegrasikan ke dalam proyek Anda hanya kode yang lulus tes dan memenuhi standar. Di sini Anda dapat membaca lebih lanjut tentang Travis CI, dan di sini tentang integrasi berkelanjutan.

Buat akun di https://travis-ci.org/ . Selanjutnya, klik tautan Review and add your authorized organizations di halaman profil. Anda akan dimintai kata sandi untuk mengakses GitHub. Klik pada Grant di bagian Organization access .


Siapkan akun Travis CI

Saya perlu menyinkronkan akun agar informasi tentang notebooktoall dan repositori notebookc muncul di akun. Biasanya, untuk Travis CI bekerja dengan kode, dibutuhkan sekitar satu menit. Setelah itu, Anda perlu mengaktifkan repositori menggunakan sakelar yang ditunjukkan pada gambar berikut.


Aktivasi Repositori

Sekarang klik tombol Settings . Di sini Anda perlu menunjukkan apakah Travis dapat membangun berdasarkan permintaan tarik atau cabang yang dikirim ke repositori.


Penyiapan membangun proyek

Sekarang saatnya untuk mengatur proyek yang sedang kami kerjakan, yang akan memungkinkan Travis membangun proyek untuk setiap permintaan penarikan.

Langkah 6. Membuat file .travis.yml


Di folder root proyek, buat file .travis.yml dengan konten berikut:

 dist: xenial language: python python: 3.7.2 install: - pip install -r requirements_dev.txt - pip install -e . script: - pytest 

dist: xenial diperlukan untuk memberi tahu Travis agar menggunakan Ubuntu Xenial 16.04 untuk mengatur lingkungan virtual. Untuk menguji kode Python 3.7, diperlukan Ubuntu Xenial, perincian tentang ini dapat ditemukan di sini .

Bagian install memungkinkan Anda untuk menginstal paket yang digunakan dalam pengembangan proyek. Perintah pip install -e . melakukan instalasi paket kami di lingkungan virtual Travis. Setelah itu, Travis, mulai pytest, akan dapat menemukan paket kami.

Langkah 7. Menguji Travis CI


Komit perubahan, serahkan ke GitHub, lakukan PR. Travis akan mulai bekerja dalam hitungan detik.


Travis sedang bekerja

Inilah yang dilakukan Travis dalam menangani proyek.


Tindakan yang dilakukan oleh Travis selama pemrosesan proyek

Jika PR tidak berhasil - Travis akan melaporkannya. Harap dicatat bahwa jika permintaan tarik tidak berhasil, Anda dapat mengirim perubahan ke cabang yang sama dan Travis akan mulai bekerja secara otomatis.

Buka halaman repositori Anda di situs web Travis dan lihat di sekitar sana. Di sini Anda dapat menemukan banyak hal menarik tentang kebaktian. Mungkin di masa mendatang Anda akan sering menjadi tamu halaman ini ketika Anda mencoba memahami apa yang menyebabkan majelis gagal.

Jika kita menganggap bahwa semuanya berjalan dengan baik, jika halaman berisi label hijau, maka verifikasi dan perakitan proyek berhasil.


Perakitan proyek selesai dengan sukses

Jika tidak ada label hijau atau merah pada halaman, buka menu More options dan pilih Requests . Jika Anda melihat pesan kesalahan merah di sini, analisislah. Jika Anda melihat file Build config file is required pesan kesalahan, itu berarti bahwa Travis tidak dapat menemukan file .travis.yml Anda di repositori. Perbaiki dan kesalahan akan hilang.

Travis mengirimkan email kepada pengguna jika perakitan proyek tidak berhasil, dan dalam kasus di mana dimungkinkan untuk memperbaikinya.

Ingatlah bahwa Anda dapat mengirim komit untuk membuka PR dan Travis akan secara otomatis memulai kembali proses pembangunan proyek.

Sekarang mari kita analisis proyek kami untuk mencakup kode dengan tes.

Langkah 8. Menilai cakupan kode dengan tes


Laporan cakupan kode dengan tes memungkinkan Anda untuk mengetahui bagian mana dari kode proyek, meskipun kecil, telah diuji. Untuk membuat laporan seperti itu, kami akan menggunakan paket pytest-cov .

Tambahkan baris berikut ke file requirements_dev.txt :

 pytest-cov==2.6.1 

Jalankan perintah berikut:

 pytest --cov=my_project_name 

Dalam kasus saya, setelah perintah pytest --cov=notebookc , laporan berikut ini ditampilkan.


Laporan Cakupan Kode

Ternyata, semua kode proyek dilengkapi dengan tes. Indikator tersebut sangat mudah dicapai jika seluruh proyek terdiri dari beberapa baris kode.

Sekarang mari kita bicara tentang alat yang memungkinkan Anda untuk menyimpan sejarah publik dari keadaan proyek dalam hal menutupi kodenya dengan tes.

Langkah 9. Menggunakan Baju


Proyek Coveralls memungkinkan Anda untuk menjaga informasi historis tentang cakupan kode dengan tes.


Baju

Untuk memanfaatkan kemampuan proyek ini, Anda harus mendaftar di situs https://coveralls.io/ menggunakan data akun GitHub Anda. Maka Anda perlu menghubungkan repositori.

Dalam file requirements_dev.txt , tambahkan coveralls==1.6.0 baris coveralls==1.6.0 . File ini, omong-omong, pada tahap kerja proyek ini akan terlihat seperti ini:

 pip==19.0.3 wheel==0.33.0 twine==1.13.0 pytest==4.3.0 pytest-cov==2.6.1 coveralls==1.6.0 

.travis.yml file .travis.yml , membawanya ke formulir ini (dalam kasus Anda, nama proyek Anda akan ada di sini):

 dist: xenial language: python python: 3.7.2 install: — pip install -r requirements_dev.txt — pip install -e . script: — pytest --cov=my_package_name after_success: — coveralls 

Sekarang, ketika Travis akan membangun proyek, dia akan menginstal paket yang diperlukan, menjalankan tes dan membuat laporan tentang cakupan kode dengan tes. Kemudian laporan ini akan dikirim ke layanan Coveralls.

Komit, kirim kode ke GitHub, dan lihat apa yang terjadi. Mungkin perlu beberapa menit agar laporan uji cakupan kode masuk ke Coveralls.


Pemrosesan proyek, laporan cakupan uji

Sekarang, di antara pemeriksaan PR, ada juga pemeriksaan yang dilakukan oleh Coveralls.

Pada halaman Coveralls, Anda dapat memverifikasi bahwa proyek ini 100% tercakup dalam tes.


Informasi Cakupan Tes

Sekarang mari kita lengkapi proyek kita dengan alat lain yang bermanfaat.

Langkah 10. Bekerja dengan PyUp


Layanan PyUp.io memungkinkan pengembang untuk mengetahui apakah dependensi yang digunakan olehnya sudah usang dan apakah mereka memiliki kerentanan. Layanan ini secara otomatis menjalankan permintaan tarikan yang bertujuan memperbarui paket di GitHub. Untuk memanfaatkan kemampuan proyek ini, Anda harus mendaftar menggunakan akun GitHub, di situs webnya - https://pyup.io/ . Saat menambahkan repositori, disarankan untuk mengatur Update Schedules ke every week . Dengan pendekatan ini, jika proyek Anda memiliki banyak dependensi, Anda tidak akan menemui terlalu banyak permintaan tarikan.


Konfigurasikan Pembaruan

Inilah yang terlihat seperti informasi paket, beberapa di antaranya sudah ketinggalan zaman, di situs web PyUp.io.


Rincian Paket

Dengan menggunakan layanan ini, Anda akan selalu tahu kapan versi terbaru dari paket yang Anda gunakan keluar. Pengetahuan, seperti yang mereka katakan, adalah setengah dari kemenangan. Dan paruh kedua, tentu saja, permintaan tarik otomatis untuk memperbarui dependensi.

Ringkasan


Dalam artikel ini, Anda belajar cara menggunakan alat seperti Hitam, pytest, Travis CI, Coveralls, dan PyUp saat mengembangkan proyek Python. Mereka membantu mengontrol dependensi proyek, memformat dan menguji kode, dan memverifikasi dan membangun proyek. Kami harap alat ini bermanfaat bagi Anda.

Pembaca yang budiman! Alat apa yang Anda gunakan saat mengembangkan proyek Python?

Source: https://habr.com/ru/post/id444344/


All Articles