Programcı değil akademik bir öğrenciyim ve araştırmamı desteklemek için Python programlarını kendi kullanımım için yazmakta uzun yıllara dayanan bir deneyime sahibim. En son projem de benim kadar birçokları için faydalı olacak ve açık kaynak kodlu bir Python kütüphanesi olarak yayınlamayı düşünüyorum.
Bununla birlikte, işleyen bir kişisel projeden başkaları tarafından acısız bir şekilde kurulabilen ve kullanılabilen bir kütüphaneye geçmenin önünde bazı engeller var gibi görünmektedir. Bu soru halka açıklamaya doğru çalışmaya başlamak için atmam gereken ilk adımlarla ilgili.
Şu anda, kütüphaneyi ve kütüphanenin kendisini kullanan kodumu içeren tek bir git deposuna sahibim ve bir şeyin kopması durumunda gitmeyi acil durum olarak geri al düğmesi olarak kullanıyorum. Bütün bunlar tek bir kullanıcı için gayet iyi çalışıyor ancak yayınlamak istersem kesinlikle uygun değil. Son olarak istediğim, kütüphanemin ayrı bir depoda olduğu ve başkaları tarafından kurulabilen pip
ve kararlı bir API'ye sahip olduğu.
Setuptools vb. Kullanmayı öğrenmek, muhtemelen yayınlamak istediğim bir noktada olduğum için çok zor değildir - benim sorunum bu noktaya gelmek için nasıl çalışmam gerektiğini bilmek.
Öyleyse sorum şu, bir Python kütüphanesi projesini kamu tüketimi için hazırlamaya başlamak için atılması gereken ilk adımlar nelerdir? Halka açık bir kütüphanenin yayınlanmasını sağlamak için dizin yapımı, git deposunu vb. Nasıl yeniden düzenlemeliyim?
Daha genel olarak, bu ilk kez denenirken yardımcı olduğu bilinen kaynaklar varsa çok yararlı olacaktır. En iyi uygulamalara ve hatalardan kaçınmaya vb. Yönelik işaretçiler de çok yardımcı olacaktır.
Bazı açıklama: Cari cevaplar çizgisinde bir soru hitap edilmektedir "nasıl benim Python kütüphanesi kullanımına başkaları için iyi bir hale getirebiliriz?" Bu faydalı, ancak sormayı düşündüğüm sorudan farklı.
Şu anda projemi bırakmak için uzun bir yolculuğun başlangıcındayım . Uygulamamın özü işe yarıyor (ve gerçekten iyi çalışıyor), ama önümdeki çalışma miktarından çok şaşırdım ve sürecin nasıl yönlendirileceğine dair rehberlik arıyorum. Örneğin:
Kütüphane kodum şu anda onu kullanan kendi etki alanına özgü koduma bağlı. Bir alt klasörde yaşıyor ve aynı git deposunu paylaşıyor. Sonunda, bağımsız bir kütüphaneye dönüştürülüp kendi havuzuna konması gerekecek, ancak bunu nasıl erteleyeceğimi bilmiyorum çünkü nasıl yapacağımı bilmiyorum. (Bir kütüphaneyi 'geliştirme modunda' nasıl kurarım, böylece onu nasıl düzenleyebilirim, ne de iki git reposunun nasıl senkronize tutulacağı.)
Dokümanlarım kısa, çünkü sonunda Sfenks veya başka bir araç kullanmam gerekeceğini biliyorum. Ancak bu araçların öğrenilmesi kolay görünmüyor, bu yüzden bu büyük bir alt proje haline geldi ve ben onu kullanmaya devam ediyorum.
Bir noktada onu paketlemek ve oldukça karmaşık olan bağımlılıkları izlemek için setuptools veya başka bir araç kullanmayı öğrenmem gerekiyor. Bunu şimdi yapmam gerekip gerekmediğinden emin değilim ve belgeler yeni bir kullanıcı için tam bir labirenttir, bu yüzden daha sonra yapmaya karar veriyorum.
Hiçbir zaman sistematik testler yapmak zorunda kalmamıştım, ancak kesinlikle bu proje için yapacağım, bu yüzden (i) projem için hangi metodolojinin doğru olduğunu bilecek testler hakkında yeterince bilgi edinmek zorundayım; (ii) benim seçtiğim metodoloji için hangi araçların mevcut olduğunu öğrenmek; (iii) seçilen aracımı kullanmayı öğren; (iv) projem için test takımları vb. uygulamak. Bu başlı başına bir proje.
Yapmam gereken başka şeyler de olabilir. Örneğin, jonrsharpe, daha önce hiç duymadığım git-flow, tox, TravisCI, virtualenv ve CookieCutter'dan bahseden yararlı bir bağlantı yayınladı . (Gönderi 2013'ten geliyor, bu yüzden hala ne kadar güncel olduğunu bulmak için biraz çalışmam gerekiyor.)
Bunları bir araya getirdiğinde çok fazla iş var, ama eminim ki takılı kalmaya devam edersem her şeyi halledebilirim ve acelem yok. Benim sorunum, her seferinde bir kez yapılabilecek yönetilebilir adımlara nasıl ayrılacağını bilmek.
Başka bir deyişle, sonunda serbest bırakılabilir bir ürüne ulaşmak için şimdi atmam gereken en önemli adımların hangileri olduğunu soruyorum. Boş bir hafta sonum varsa, bunlardan hangisine odaklanmalıyım? Hangi (eğer varsa) diğerlerinden izole edilerek yapılabilir, böylece her şeyi yapmaya gerek kalmadan en azından bir adım atabildim? Bu şeyleri öğrenmenin en etkili yolu nedir, böylece hala projenin kendisine odaklanmak için zamanım olacak. (Tüm bunların aslında benim işim değil hobi bir proje olduğunu akılda tutarak.) Yapmam gereken herhangi bir şey var mı , bu yüzden kendime çok fazla zaman ve çaba harcıyorum.
Tüm cevaplar büyük beğeni topluyor, ancak özellikle modern Python gelişimine atıfta bulunarak, bu proje yönetimi konularına odaklanan cevapları memnuniyetle karşılarım.