Saya seorang akademis daripada seorang programmer, dan saya memiliki pengalaman bertahun-tahun menulis program Python untuk saya gunakan sendiri, untuk mendukung penelitian saya. Proyek terbaru saya mungkin bermanfaat bagi banyak orang lain seperti halnya saya, dan saya berpikir untuk melepaskannya sebagai pustaka Python open-source.
Namun, tampaknya ada beberapa rintangan untuk menyeberang dari proyek pribadi yang berfungsi ke perpustakaan yang dapat diinstal dan digunakan tanpa rasa sakit oleh orang lain. Pertanyaan ini adalah tentang langkah pertama yang harus saya ambil untuk mulai bekerja menuju rilis publik.
Saat ini, saya memiliki repositori git tunggal yang berisi kode saya yang menggunakan pustaka serta pustaka itu sendiri, dan saya menggunakan git sebagai tombol urung darurat jika terjadi kerusakan. Semua ini berfungsi dengan baik untuk satu pengguna tetapi jelas tidak sesuai jika saya ingin melepaskannya. Di mana saya ingin berakhir adalah bahwa perpustakaan saya berada di repositori terpisah dan dapat diinstal oleh orang lain menggunakan pip
, dan memiliki API yang stabil.
Belajar menggunakan setuptools dll. Mungkin tidak begitu sulit begitu saya pada titik ingin mempublikasikannya - masalah saya adalah mengetahui bagaimana saya harus bekerja untuk sampai ke titik itu.
Jadi pertanyaan saya adalah, apa langkah pertama yang harus diambil seseorang untuk mulai menyiapkan proyek perpustakaan Python untuk konsumsi publik? Bagaimana saya harus mengatur ulang struktur direktori saya, git repositori, dll. Agar dapat mulai bekerja ke publik, rilis perpustakaan?
Secara umum, akan sangat membantu jika ada sumber daya yang diketahui sangat membantu ketika mencoba ini untuk pertama kalinya. Menunjuk pada praktik terbaik dan kesalahan yang harus dihindari, dll., Juga akan sangat membantu.
Beberapa klarifikasi: jawaban saat ini menjawab pertanyaan di sepanjang baris "bagaimana saya bisa membuat perpustakaan Python saya menjadi yang baik untuk digunakan orang lain?" Ini berguna, tetapi berbeda dari pertanyaan yang ingin saya tanyakan.
Saya saat ini sedang memulai perjalanan panjang untuk merilis proyek saya. Inti dari implementasi saya bekerja (dan bekerja dengan sangat baik), tetapi saya merasa kewalahan dengan jumlah pekerjaan di depan saya, dan saya sedang mencari panduan tentang cara menavigasi proses. Sebagai contoh:
Kode perpustakaan saya saat ini digabungkan ke kode khusus domain saya sendiri yang menggunakannya. Ia hidup dalam subfolder dan berbagi repositori git yang sama. Akhirnya, itu harus dibuat menjadi perpustakaan yang berdiri sendiri dan dimasukkan ke dalam repositori sendiri, tetapi saya terus menunda-nunda ini karena saya tidak tahu bagaimana melakukannya. (Entah bagaimana cara menginstal perpustakaan dalam 'mode pengembangan' sehingga saya masih bisa mengeditnya, atau bagaimana menjaga agar kedua repo git tetap sinkron.)
Dokumen saya singkat, karena saya tahu bahwa pada akhirnya saya harus menggunakan Sphinx atau alat lain. Tetapi alat-alat ini tampaknya tidak mudah dipelajari, jadi ini menjadi sub-proyek utama dan saya terus menundanya.
Pada titik tertentu saya perlu belajar menggunakan setuptools atau alat lain untuk mengemasnya dan melacak dependensinya, yang cukup rumit. Saya tidak yakin apakah saya perlu melakukan ini sekarang atau tidak, dan dokumentasinya adalah labirin absolut untuk pengguna baru, jadi saya terus memutuskan untuk melakukannya nanti.
Saya tidak pernah harus melakukan pengujian sistematis, tetapi saya pasti akan melakukannya untuk proyek ini, jadi saya harus (i) cukup belajar tentang pengujian untuk mengetahui metodologi mana yang tepat untuk proyek saya; (ii) mempelajari alat apa yang tersedia untuk metodologi yang saya pilih; (iii) belajar menggunakan alat yang saya pilih; (iv) mengimplementasikan test suites dll untuk proyek saya. Ini adalah proyek itu sendiri.
Mungkin ada hal-hal lain yang harus saya lakukan juga. Sebagai contoh, jonrsharpe memposting tautan bermanfaat yang menyebutkan git-flow, tox, TravisCI, virtualenv dan CookieCutter, yang belum pernah saya dengar sebelumnya. (Posnya dari tahun 2013, jadi saya juga harus melakukan beberapa pekerjaan untuk mengetahui berapa banyak yang masih ada saat ini.)
Ketika Anda menyatukan semua ini, ini adalah pekerjaan yang sangat besar, tapi saya yakin saya bisa menyelesaikan semuanya jika saya terus berusaha melakukannya, dan saya tidak terburu-buru. Masalah saya adalah mengetahui bagaimana memecahnya menjadi langkah-langkah yang dapat dikelola yang dapat dilakukan satu per satu.
Dengan kata lain, saya menanyakan langkah konkret yang paling penting yang dapat saya ambil sekarang, untuk mencapai produk yang dapat dirilis pada akhirnya. Jika saya memiliki akhir pekan gratis, manakah dari hal-hal ini yang harus saya fokuskan? Yang mana (jika ada) yang bisa dilakukan secara terpisah dari yang lain, sehingga saya setidaknya bisa menyelesaikan satu langkah tanpa perlu melakukan semuanya? Apa cara paling efisien untuk mempelajari hal-hal ini sehingga saya masih punya waktu untuk fokus pada proyek itu sendiri? (Mengingat bahwa semua ini pada dasarnya adalah proyek hobi, bukan pekerjaan saya.) Apakah ada yang benar-benar tidak perlu saya lakukan , sehingga menghemat banyak waktu dan usaha?
Semua jawaban sangat dihargai, tetapi saya akan sangat menyambut jawaban yang berfokus pada aspek manajemen proyek ini, dengan referensi khusus untuk pengembangan Python modern.