Doxygen kullanarak Python kodunu belgeleme [kapalı]


94

Doxygen'in C veya PHP kodunun belgelerini oluşturmasını seviyorum. Yaklaşan bir Python projem var ve sanırım Python'un /* .. */yorumları olmadığını ve ayrıca kendi kendini belgeleme olanağına sahip olduğunu hatırlıyorum, bu da pitonik bir yol gibi görünüyor.

Doxygen'e aşina olduğuma göre, Python belgelerimi oluşturmak için onu nasıl kullanabilirim? Özellikle bilmem gereken bir şey var mı?

Yanıtlar:


62

Bu, doxygen web sitesinde belgelenmiştir , ancak burada özetlemek gerekirse:

Python kodunuzu belgelemek için doxygen kullanabilirsiniz. Python dokümantasyon dizesi sözdizimini kullanabilirsiniz:

"""@package docstring
Documentation for this module.

More details.
"""

def func():
    """Documentation for a function.

    More details.
    """
    pass

Bu durumda yorumlar doxygen tarafından alınacaktır, ancak özel doxygen komutlarından herhangi birini kullanamazsınız .

Veya (doxygen altındaki C-stili dillere benzer şekilde #) üyeden önceki ilk satırdaki yorum işaretçisini ( ) ikiye katlayabilirsiniz :

## @package pyexample
#  Documentation for this module.
#
#  More details.

## Documentation for a function.
#
#  More details.
def func():
    pass

Bu durumda, özel doxygen komutlarını kullanabilirsiniz. Orada özel bir Python çıkış modu, ama görünüşe göre ayarlayarak sonuçları geliştirebilirsiniz OPTMIZE_OUTPUT_JAVAiçin YES.

Dürüst olmak gerekirse, fark beni biraz şaşırttı - görünüşe göre doxygen ## blok veya "" "bloklardaki yorumları algılayabildiğinde, işin çoğu yapılacak ve özel komutları kullanabileceksiniz. Belki de "" "kullananların daha fazla Pythonic dokümantasyon uygulamasına bağlı kalmasını ve bu da özel doxygen komutlarına müdahale etmesini bekliyorlar?


57
Python'daki dokümantasyon olarak yorumlar kötüdür. Yorumlar bir modül geliştiricisi içindir (neden ve nasıl uygulandı). Tüm belgeler docstrings (nasıl kullanılır) içinde olmalıdır.
jfs

4
Python yorumları alır ve bunları dokümanlar olarak kullanır, böylece iki format da pydoc ile çalışır.
docwhat

10
Normal docstrings içinde özel komutları kullanmayı mümkün kılan doxypy'ye bir göz atın .
Mauro

84

Doxypy giriş filtresi standart bir Python docstring'ini formatında hemen hemen tüm Doxygen en biçimlendirme etiketlerinin kullanmasına olanak sağlar. Büyük bir karma C ++ ve Python oyun uygulama çerçevesini belgelemek için kullanıyorum ve iyi çalışıyor.


2
Soru için doğru olan bu cevabın da altta olması üzücü :(
Dave Lasley

9
Ayrıca, Pythonic belgelerini Doxygen'in kullanabileceği bir şeye dönüştürebileceği için doxypy'ye göz atmak isteyebilirsiniz .
Feneric

8
Doxypy ölü ve gitmiş görünüyor ..
naught101

24

Sonunda, sadece iki seçeneğiniz var:

İçeriğinizi Doxygen kullanarak oluşturursunuz veya içeriğinizi Sphinx * kullanarak oluşturursunuz.

  1. Doxygen : Çoğu Python projesi için tercih edilen bir araç değildir. Ancak, C veya C ++ ile yazılmış diğer ilgili projelerle uğraşmanız gerekiyorsa, bu mantıklı olabilir. Bunun için doxypy kullanarak Doxygen ve Python arasındaki entegrasyonu geliştirebilirsiniz .

  2. Sphinx : Bir Python projesini belgelemek için kullanılan fiili araç. Burada üç seçeneğiniz var: manuel, yarı otomatik (saplama oluşturma) ve tam otomatik (Doxygen benzeri).

    1. Manuel API dokümantasyonu için Sphinx autodoc'a sahipsiniz . Bu, gömülü API tarafından oluşturulan öğeler içeren bir kullanıcı kılavuzu yazmak için harikadır.
    2. Yarı otomatik için Sphinx autosummary var . autosummary_generateYapılandırma sisteminizi sphinx-autogen'i çağıracak şekilde kurabilir veya Sphinx'inizi yapılandırma ile ayarlayabilirsiniz . Otomatik özetler içeren bir sayfa ayarlamanız ve ardından sayfaları manuel olarak düzenlemeniz gerekecektir. Seçenekleriniz var, ancak bu yaklaşımla ilgili deneyimim, çok fazla yapılandırma gerektirdiğidir ve sonunda yeni şablonlar oluşturduktan sonra bile, hatalar buldum ve tam olarak neyin genel API olarak açıklandığını ve neyin olmadığını belirlemenin imkansızlığını buldum. Bence bu araç, manuel düzenleme gerektiren saplama üretimi için iyidir ve başka bir şey değildir. El kitabına son vermek için bir kısayol gibidir.
    3. Tam otomatik. Bu birçok kez eleştirildi ve uzun süredir , bloktaki yeni bir çocuk olan AutoAPI gelene kadar Sphinx ile entegre iyi bir tam otomatik Python API oluşturucumuz yoktu . Bu, Python'da otomatik API üretimi için açık ara en iyisidir (not: utanmaz kendi kendine tanıtım).

Dikkat edilmesi gereken başka seçenekler de var:

  • Nefes alın : Bu çok iyi bir fikir olarak başladı ve Doxygen kullanan diğer dillerde ilgili birkaç projeyle çalıştığınızda mantıklı geliyor. Fikir, Doxygen XML çıktısını kullanmak ve API'nizi oluşturmak için bunu Sphinx'e beslemektir. Böylece Doxygen'in tüm iyiliğini koruyabilir ve dokümantasyon sistemini Sphinx'te birleştirebilirsiniz. Teoride harika. Şimdi, pratikte, projeyi son kontrol ettiğimde üretime hazır değildi.
  • pydoctor *: Çok özel. Kendi çıktısını üretir. Sphinx ile bazı temel entegrasyona ve bazı güzel özelliklere sahiptir.

Autoapi kullanma komutu nedir? Conf.py dosyasını, autoapi modüllerini içerecek şekilde değiştirdim. Şu anda "sphinx-apidoc -o apidocs --full" komutunu çalıştırıyorum.
Sandeep

Ekstra bir komuta ihtiyacınız yok. Sadece sphinx-build kullanarak Sphinx belgelerinizi oluşturun. Tox ile şu şekilde entegre ettim: github.com/HPENetworking/cookiecutter_python/blob/module/…
Havok

@Havok Bir modülün tüm öğelerini değişken explicite içine koymam gerektiğinde AutoAPI'nin nasıl "tam otomatik" olduğunu anlamıyorum__all__ .
buhtz

20

Sphinx, anladığım kadarıyla esas olarak kaynak koddan bağımsız olarak yazılmış belgeleri biçimlendirmek için bir araçtır.

Python docstrings'den API belgeleri oluşturmak için önde gelen araçlar pdoc ve pydoctor'dur . İşte pydoctor'un Twisted ve Bazaar için ürettiği API belgeleri .

Elbette, bir şeyler üzerinde çalışırken sadece doküman dizilerine bakmak isterseniz, " pydoc " komut satırı aracı ve help()etkileşimli yorumlayıcıda bulunan işlev vardır.


2
Sphinx'in temel olarak kaynak kodundan bağımsız olarak yazılan dokümanları kullandığı doğrudur, ancak autodoc uzantısı kullanılarak python modüllerinden dokümanlar kolayca dahil edilebilir. Dinamik doğası nedeniyle, python modülleri için elle yazılmış belgeleri oluşturulan api belgelerinden daha kullanışlı buluyorum.
Peter Hoffmann

3
Belgelenmesi zor bir projede sınıflar arasındaki yapıyı ve ilişkiyi bozmaya çalıştığınızda "elle yazılmış" belgeler kullanılamaz.
Ярослав Рахматуллин

13

Diğer çok iyi bir belgeleme aracı da sfenkstir . Yaklaşan python 2.6 dokümantasyonu için kullanılacak ve django ve diğer birçok python projesi tarafından kullanılacak .

Sfenks web sitesinden:

  • Çıktı biçimleri : Yazdırılabilir PDF sürümleri için HTML (Windows HTML Yardımı dahil) ve LaTeX
  • Kapsamlı çapraz referanslar : anlamsal işaretleme ve işlevler, sınıflar, sözlük terimleri ve benzer bilgi parçaları için otomatik bağlantılar
  • Hiyerarşik yapı : kardeşlere, ebeveynlere ve çocuklara otomatik bağlantılarla bir belge ağacının kolay tanımı
  • Otomatik indeksler : genel indeks ve modül indeksi
  • Kod işleme : Pygments vurgulayıcı kullanarak otomatik vurgulama
  • Uzantılar : kod parçacıklarının otomatik testi, Python modüllerinden belge dizilerinin dahil edilmesi ve daha fazlası

11
Denedim. Sfenks kendi başına çok ilginç bir araç olsa da oksijenden beklediğim gibi değildi. Gerçekten iyi bir son müşteri dokümanı için daha çok bir araç olan doxygen, güzel bir yazdırılabilir formatta bir API genel bakışını görmek isteyen bir yazılım tasarımcısı için çok daha iyidir.
Zane

3
@Zane Katılıyorum. Bir Doxygen aşığı olarak, tam otomatik API başvuru kılavuzu oluşturmayı çok fazla özledim. Şimdi başka bir seçenek mevcut olduğundan cevabımı kontrol edin.
Havok
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.