कैसे Doxygen का उपयोग करके पायथन कोड को दस्तावेज़ित करें


94

मुझे C या PHP कोड के प्रलेखन बनाने के लिए Doxygen पसंद है। मेरे पास एक आगामी पायथन परियोजना है और मुझे लगता है कि मुझे याद है कि पायथन में /* .. */टिप्पणियां नहीं हैं , और इसकी अपनी स्वयं की प्रलेखन सुविधा भी है जो दस्तावेज़ के लिए पायथोनिक तरीका लगता है।

चूँकि मैं Doxygen से परिचित हूँ, मैं इसका उपयोग अपने पायथन डॉक्यूमेंटेशन को बनाने के लिए कैसे कर सकता हूँ? क्या विशेष रूप से ऐसा कुछ है जिससे मुझे अवगत होने की आवश्यकता है?

जवाबों:


62

यह डॉक्‍यूमेंट्री वेबसाइट पर प्रलेखित है , लेकिन यहां संक्षेप में प्रस्तुत करने के लिए:

आप अपने पायथन कोड को दस्तावेज़ करने के लिए doxygen का उपयोग कर सकते हैं। आप या तो पायथन प्रलेखन स्ट्रिंग सिंटैक्स का उपयोग कर सकते हैं:

"""@package docstring
Documentation for this module.

More details.
"""

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

    More details.
    """
    pass

जिस स्थिति में टिप्पणियाँ doxygen द्वारा निकाली जाएंगी, लेकिन आप किसी विशेष doxygen कमांड का उपयोग नहीं कर पाएंगे ।

या आप (doxygen के तहत सी-शैली भाषाओं के समान #) सदस्य से पहले पहली पंक्ति में टिप्पणी मार्कर ( ) को दोगुना कर सकते हैं :

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

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

उस स्थिति में, आप विशेष doxygen कमांड का उपयोग कर सकते हैं। कोई खास अजगर उत्पादन मोड है, लेकिन आप जाहिरा तौर पर सेट करके परिणामों में सुधार कर सकते हैं OPTMIZE_OUTPUT_JAVAकरने के लिए YES

ईमानदारी से, मैं अंतर पर थोड़ा आश्चर्यचकित हूं - ऐसा लगता है जैसे एक बार doxygen ## ब्लॉक या "" ब्लॉक में टिप्पणियों का पता लगा सकता है, अधिकांश काम किया जाएगा और आप विशेष कमांड का उपयोग करने में सक्षम होंगे; या तो मामला। हो सकता है कि वे लोगों को "" "" का उपयोग करने की अपेक्षा करते हैं जो अधिक पायथनिक अभ्यास प्रथाओं का पालन करते हैं और जो विशेष डॉक्सीजन कमांड के साथ हस्तक्षेप करेंगे?


57
पायथन में प्रलेखन के रूप में टिप्पणियाँ खराब हैं। टिप्पणियाँ एक मॉड्यूल अनुचर (क्यों और कैसे लागू की जाती हैं) के लिए हैं। सभी दस्तावेज डॉकस्ट्रिंग्स (कैसे उपयोग करें) में होने चाहिए।
21

4
अजगर टिप्पणियों में खींच लेंगे और उन्हें डॉकस्ट्रिंग्स के रूप में उपयोग करेंगे, इसलिए दो प्रारूप दोनों pydoc के साथ काम करते हैं।
docwhat

10
Doxypy पर एक नज़र डालें, जो सामान्य डोकस्ट्रिंग्स के अंदर विशेष कमांड का उपयोग करना संभव बनाता है ।
मौरो

82

Doxypy इनपुट फ़िल्टर आप काफी सभी Doxygen के स्वरूपण टैग की एक मानक अजगर docstring प्रारूप में उपयोग करने के लिए अनुमति देता है। मैं इसे एक बड़े मिश्रित C ​​++ और पायथन गेम एप्लिकेशन फ्रेमवर्क को दस्तावेज करने के लिए उपयोग करता हूं, और यह अच्छी तरह से काम कर रहा है।


2
यह दुख की बात है कि यह जवाब, सवाल के लिए सही होने के नाते, नीचे भी है :(
डेव लेस्ले

9
तुम भी doxypypy की जाँच करना चाहते हो सकता है क्योंकि यह Pythonic docstrings को किसी ऐसी चीज़ में परिवर्तित कर देगा जिसे Doxygen उपयोग कर सकता है।
फेनरिक जूल

8
Doxypy मृत और चला गया प्रतीत होता है ..
naught101

23

अंत में, आपके पास केवल दो विकल्प हैं:

आप अपनी सामग्री को Doxygen का उपयोग करके उत्पन्न करते हैं, या आप Sphinx * का उपयोग करके अपनी सामग्री उत्पन्न करते हैं।

  1. Doxygen : यह अधिकांश पायथन परियोजनाओं के लिए पसंद का उपकरण नहीं है। लेकिन अगर आपको C या C ++ में लिखी गई अन्य संबंधित परियोजनाओं से निपटना है तो यह समझ में आ सकता है। इसके लिए आप डॉक्सीपाइप का उपयोग करके Doxygen और Python के बीच एकीकरण में सुधार कर सकते हैं ।

  2. स्फिंक्स : पायथन परियोजना के दस्तावेजीकरण के लिए डिफेक्टो टूल। आपके पास यहां तीन विकल्प हैं: मैनुअल, सेमी-ऑटोमेटिक (स्टब जेनरेशन) और पूरी तरह से ऑटोमैटिक (डॉक्सिजन जैसे)।

    1. मैनुअल एपीआई प्रलेखन के लिए आपके पास स्फिंक्स ऑटोडोक है । एम्बेडेड एपीआई जनित तत्वों के साथ उपयोगकर्ता गाइड लिखने के लिए यह बहुत अच्छा है।
    2. अर्ध-स्वचालित के लिए आपके पास स्फिंक्स ऑटोसुमरी है । आप स्फिंक्स-ऑटोजेन को कॉल करने के लिए अपने बिल्ड सिस्टम को सेटअप कर सकते हैं या अपने Sphinx को autosummary_generateकॉन्फ़िगरेशन के साथ सेटअप कर सकते हैं । आपको आटोसमरियों के साथ एक पृष्ठ सेटअप करना होगा, और फिर मैन्युअल रूप से पृष्ठों को संपादित करना होगा। आपके पास विकल्प हैं, लेकिन इस दृष्टिकोण के साथ मेरा अनुभव यह है कि इसके लिए बहुत अधिक कॉन्फ़िगरेशन की आवश्यकता होती है, और अंत में नए टेम्प्लेट बनाने के बाद भी, मुझे बग और सार्वजनिक एपीआई के रूप में क्या उजागर किया गया था, यह निर्धारित करने के लिए कीड़े और असंभवता मिली। मेरी राय है कि यह उपकरण स्टब जनरेशन के लिए अच्छा है जिसे मैनुअल एडिटिंग की आवश्यकता होगी, और इससे ज्यादा कुछ नहीं। मैन्युअल में समाप्त होने के लिए एक शॉर्टकट की तरह है।
    3. पूरी तरह से स्वचालित। इसकी कई बार आलोचना की गई और लंबे समय तक हमारे पास एक अच्छा पूरी तरह से स्वचालित पायथन एपीआई जनरेटर नहीं था, जब तक कि ऑटोएपीआई Sphinx के साथ एकीकृत नहीं हुआ, जो ब्लॉक में एक नया बच्चा है। यह पायथन में स्वचालित एपीआई पीढ़ी के लिए अब तक का सबसे अच्छा है (नोट: बेशर्म आत्म-प्रचार)।

नोट करने के लिए अन्य विकल्प हैं:

  • सांस लें : यह एक बहुत अच्छे विचार के रूप में शुरू हुआ, और समझ में आता है जब आप अन्य संबंधित भाषाओं में कई प्रोजेक्ट के साथ काम करते हैं जो Doxygen का उपयोग करते हैं। विचार यह है कि Doxygen XML आउटपुट का उपयोग करें और अपने API को जेनरेट करने के लिए इसे Sphinx को खिलाएं। तो, आप Doxygen की सभी अच्छाई को रख सकते हैं और स्फिंक्स में प्रलेखन प्रणाली को एकजुट कर सकते हैं। सिद्धांत रूप में बहुत बढ़िया। अब, व्यवहार में, पिछली बार जब मैंने जाँच की कि परियोजना उत्पादन के लिए तैयार नहीं थी।
  • pydoctor *: बहुत विशेष। अपना खुद का आउटपुट तैयार करता है। इसमें स्फिंक्स के साथ कुछ बुनियादी विशेषताएं हैं, और कुछ अच्छी विशेषताएं हैं।

ऑटोपाई का उपयोग करने की आज्ञा क्या है। मैंने ऑटो-मोडी मॉड्यूल को शामिल करने के लिए conf.py संशोधित किया है। वर्तमान में, मैं "sphinx-apidoc -o apidocs --full" चलाता हूं।
संदीप

आपको एक अतिरिक्त कमांड की आवश्यकता नहीं है। बस स्फिंक्स-बिल्ड का उपयोग करके अपने स्फिंक्स प्रलेखन का निर्माण करें। मैंने इसे इस तरह से टोक्स के साथ एकीकृत किया है: github.com/HPENetworking/cookiecutter_python/blob/module/…
हैवॉक

@ हॉक मैं यह नहीं देखता कि ऑटोएपीआई "पूरी तरह से स्वचालित" है जब मुझे किसी मॉड्यूल के सभी तत्वों को वेरिएबल एक्सप्लिसाइट में डालना होगा __all__
buhtz

20

स्फिंक्स मुख्य रूप से स्रोत कोड से स्वतंत्र रूप से लिखे गए डॉक्स को प्रारूपित करने का एक उपकरण है, जैसा कि मैं इसे समझता हूं।

अजगर डॉक्सिंग से एपीआई डॉक्स उत्पन्न करने के लिए, प्रमुख उपकरण पीडीओक और पीडोक्टर हैं । यहाँ ट्विस्टेड और बाज़ार के लिए pydoctor का जनरेट किया गया एपीआई डॉक्स है ।

बेशक, अगर आप सामान पर काम करते समय डॉकस्ट्रिंग्स पर एक नज़र रखना चाहते हैं, तो " pydoc " कमांड लाइन टूल और साथ ही साथ help()इंटरएक्टिव इंटरप्रेटर में उपलब्ध फ़ंक्शन भी है।


2
यह सच है, कि स्फिंक्स स्रोत कोड से स्वतंत्र रूप से लिखे गए डॉक्स को आधार के रूप में उपयोग करता है, लेकिन ऑटोडोक एक्सटेंशन का उपयोग करके आसानी से अजगर मॉड्यूल से डॉक्सस्ट्रिंग शामिल कर सकते हैं। इसकी गतिशील प्रकृति की वजह से मुझे अजगर मॉड्यूल के लिए हाथ से लिखित प्रलेखन उत्पन्न एपीआई डॉक्स की तुलना में अधिक उपयोगी लगता है।
पीटर हॉफमैन

3
"हाथ से लिखे गए" डॉक्स तब उपलब्ध नहीं होते हैं जब आप कुछ मुश्किल से प्रलेखित प्रोजेक्ट में कक्षाओं के बीच संरचना और संबंध को बनाने की कोशिश कर रहे होते हैं।
урослав Рахматуллин

13

एक अन्य बहुत अच्छा प्रलेखन उपकरण स्फिंक्स है । यह आगामी अजगर 2.6 प्रलेखन के लिए इस्तेमाल किया जाएगा और django और कई अन्य अजगर परियोजनाओं द्वारा उपयोग किया जाता है ।

स्फिंक्स वेबसाइट से:

  • आउटपुट प्रारूप : प्रिंट करने योग्य पीडीएफ संस्करणों के लिए HTML (विंडोज HTML सहायता सहित) और लाटेक्स
  • व्यापक क्रॉस-रेफ़रेंस : फ़ंक्शंस, क्लासेस, शब्दावली शब्द और सूचना के समान टुकड़ों के लिए सिमेंटिक मार्कअप और स्वचालित लिंक
  • पदानुक्रमित संरचना : दस्तावेज़ पेड़ की आसान परिभाषा, भाई-बहन, माता-पिता और बच्चों के लिए स्वचालित लिंक के साथ
  • स्वचालित सूचकांक : सामान्य सूचकांक और साथ ही एक मॉड्यूल सूचकांक
  • कोड हैंडलिंग : पायस हाइलाइटर का उपयोग करके स्वचालित हाइलाइटिंग
  • एक्सटेंशन : कोड स्निपेट्स का स्वचालित परीक्षण, पायथन मॉड्यूल से डोकस्ट्रिंग्स का समावेश, और बहुत कुछ

11
इसे आजमाया है। जबकि अपने आप में स्फिंक्स एक बहुत ही दिलचस्प उपकरण है, यह वह नहीं था जो मुझे उम्मीद थी कि मैं डॉक्सीजन से आ रहा हूं। वास्तव में अच्छे एंड कस्टमर डॉक के लिए एक टूल, डॉक्स ऑक्सीजन एक SW डिजाइनर के लिए बहुत बेहतर है जो सिर्फ एक अच्छा प्रिंट करने योग्य प्रारूप में एपीआई अवलोकन देखना चाहते हैं।
ज़ेन

3
@Zane मैं सहमत हूँ। एक Doxygen प्रेमी के रूप में मैं बहुत पूरी तरह से स्वचालित एपीआई संदर्भ गाइड पीढ़ी को याद किया। मेरे जवाब की जाँच करें क्योंकि कुछ अन्य विकल्प अब उपलब्ध हैं।
हवोक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.