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 CISaya 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 RepositoriSekarang klik tombol
Settings
. Di sini Anda perlu menunjukkan apakah Travis dapat membangun berdasarkan permintaan tarik atau cabang yang dikirim ke repositori.
Penyiapan membangun proyekSekarang 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 bekerjaInilah yang dilakukan Travis dalam menangani proyek.
Tindakan yang dilakukan oleh Travis selama pemrosesan proyekJika 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 suksesJika 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 KodeTernyata, 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.
BajuUntuk 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 ujiSekarang, 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 TesSekarang 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 PembaruanInilah yang terlihat seperti informasi paket, beberapa di antaranya sudah ketinggalan zaman, di situs web PyUp.io.
Rincian PaketDengan 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?
