วิธีการจัดทำเอกสารรหัส Python โดยใช้ Doxygen [ปิด]


94

ฉันชอบ Doxygen ในการสร้างเอกสารของรหัส C หรือ PHP ฉันมีโครงการ Python ที่กำลังจะมาถึงและฉันคิดว่าฉันจำได้ว่า Python ไม่มี/* .. */ความคิดเห็นและยังมีสิ่งอำนวยความสะดวกในการจัดทำเอกสารด้วยตนเองซึ่งดูเหมือนจะเป็นวิธีการจัดทำเอกสารแบบไพ ธ อน

เนื่องจากฉันคุ้นเคยกับ Doxygen ฉันจะใช้มันเพื่อสร้างเอกสาร Python ได้อย่างไร มีอะไรเป็นพิเศษที่ฉันต้องระวังหรือไม่?

คำตอบ:


62

สิ่งนี้บันทึกไว้ในเว็บไซต์ doxygenแต่สรุปได้ที่นี่:

คุณสามารถใช้ doxygen เพื่อจัดทำเอกสารรหัส Python ของคุณ คุณสามารถใช้ไวยากรณ์สตริงเอกสาร Python:

"""@package docstring
Documentation for this module.

More details.
"""

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

    More details.
    """
    pass

ในกรณีนี้ความคิดเห็นจะถูกดึงออกมาโดย doxygen แต่คุณจะไม่สามารถใช้คำสั่ง doxygen พิเศษใด ๆได้

หรือคุณสามารถ (คล้ายกับภาษาสไตล์ C ภายใต้ doxygen) เพิ่มเครื่องหมายแสดงความคิดเห็น ( #) ในบรรทัดแรกก่อนสมาชิก:

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

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

ในกรณีนั้นคุณสามารถใช้คำสั่ง doxygen พิเศษ ไม่มีโหมดเอาต์พุต Python โดยเฉพาะ แต่คุณสามารถปรับปรุงผลลัพธ์ได้โดยตั้งค่าOPTMIZE_OUTPUT_JAVAเป็นYES.

จริงๆแล้วฉันรู้สึกประหลาดใจเล็กน้อยกับความแตกต่างดูเหมือนว่าครั้งหนึ่ง doxygen สามารถตรวจจับความคิดเห็นใน ## บล็อกหรือบล็อก "" "ได้งานส่วนใหญ่จะเสร็จสิ้นและคุณจะสามารถใช้คำสั่งพิเศษใน ทั้งสองกรณีบางทีพวกเขาอาจคาดหวังว่าผู้คนที่ใช้ "" "จะปฏิบัติตามแนวทางปฏิบัติเกี่ยวกับเอกสาร Pythonic มากขึ้นและจะรบกวนคำสั่ง doxygen พิเศษหรือไม่?


57
ความคิดเห็นที่เป็นเอกสารใน Python ไม่ดี ความคิดเห็นมีไว้สำหรับผู้ดูแลโมดูล (ทำไมและวิธีการใช้งาน) เอกสารทั้งหมดควรอยู่ใน docstrings (วิธีใช้)
jfs

4
Python จะดึงความคิดเห็นและใช้เป็น docstrings ดังนั้นทั้งสองรูปแบบจึงทำงานร่วมกับ pydoc
docwhat

10
ดูdoxypyซึ่งทำให้สามารถใช้คำสั่งพิเศษภายใน docstrings ปกติได้
Mauro

84

doxypyกรองขาเข้าช่วยให้คุณใช้สวยมากทุก Doxygen ของการจัดรูปแบบแท็กในรูปแบบมาตรฐาน docstring หลาม ฉันใช้มันเพื่อจัดทำเอกสารเฟรมเวิร์กแอปพลิเคชันเกม C ++ และ Python แบบผสมขนาดใหญ่และใช้งานได้ดี


2
เป็นเรื่องน่าเศร้าที่คำตอบนี้เป็นคำตอบที่ถูกต้องสำหรับคำถามก็อยู่ที่ด้านล่างเช่นกัน :(
Dave Lasley

9
คุณอาจต้องการตรวจสอบdoxypypyเนื่องจากจะแปลง Pythonic docstrings ให้เป็นสิ่งที่ Doxygen สามารถใช้ได้
Feneric

8
Doxypy ดูเหมือนจะตายและจากไป ..
naught101

24

ท้ายที่สุดคุณมีเพียงสองทางเลือก:

คุณสร้างเนื้อหาของคุณโดยใช้ Doxygen หรือคุณสร้างเนื้อหาของคุณโดยใช้ Sphinx *

  1. Doxygen : ไม่ใช่เครื่องมือที่เลือกใช้สำหรับโครงการ Python ส่วนใหญ่ แต่ถ้าคุณต้องจัดการกับโปรเจ็กต์อื่น ๆ ที่เกี่ยวข้องซึ่งเขียนด้วยภาษา C หรือ C ++ มันก็สมเหตุสมผลดี สำหรับนี้คุณสามารถปรับปรุงการบูรณาการระหว่าง Doxygen และ Python ใช้doxypypy

  2. Sphinx : เครื่องมือ defacto สำหรับจัดทำเอกสารโครงการ Python คุณมีสามตัวเลือกที่นี่: ด้วยตนเอง, กึ่งอัตโนมัติ (การสร้างต้นขั้ว) และอัตโนมัติเต็มรูปแบบ (Doxygen like)

    1. สำหรับเอกสาร API คู่มือคุณมีสฟิงซ์AutoDoc นี่เป็นวิธีที่ดีในการเขียนคู่มือผู้ใช้ที่มีองค์ประกอบที่สร้าง API ในตัว
    2. สำหรับกึ่งอัตโนมัติคุณมีสฟิงซ์autosummary คุณสามารถตั้งค่าระบบสร้างของคุณเพื่อเรียกใช้ sphinx-autogen หรือตั้งค่า Sphinx ของคุณด้วยการautosummary_generateกำหนดค่า คุณจะต้องตั้งค่าเพจด้วยการสรุปอัตโนมัติจากนั้นแก้ไขเพจด้วยตนเอง คุณมีตัวเลือก แต่ประสบการณ์ของฉันกับแนวทางนี้คือต้องใช้การกำหนดค่ามากเกินไปและในตอนท้ายแม้ว่าจะสร้างเทมเพลตใหม่แล้วฉันก็พบข้อบกพร่องและความเป็นไปไม่ได้ที่จะระบุได้ว่าสิ่งใดถูกเปิดเผยว่าเป็น API สาธารณะหรือไม่ ความคิดเห็นของฉันคือเครื่องมือนี้ดีสำหรับการสร้างต้นขั้วที่จะต้องมีการแก้ไขด้วยตนเองและไม่มีอะไรเพิ่มเติม เปรียบเสมือนทางลัดที่จะลงเอยด้วยตนเอง
    3. อัตโนมัติเต็มรูปแบบ สิ่งนี้ถูกวิพากษ์วิจารณ์หลายครั้งและเป็นเวลานานแล้วที่เราไม่มีตัวสร้าง Python API อัตโนมัติที่ดีที่รวมเข้ากับ Sphinx จนกระทั่งAutoAPIมาซึ่งเป็นเด็กใหม่ในบล็อก นี่เป็นวิธีที่ดีที่สุดสำหรับการสร้าง API อัตโนมัติใน Python (หมายเหตุ: การโปรโมตตัวเองแบบไร้ยางอาย)

มีตัวเลือกอื่น ๆ ที่ควรทราบ:

  • Breathe : สิ่งนี้เริ่มต้นเป็นความคิดที่ดีมากและเหมาะสมเมื่อคุณทำงานกับโครงการที่เกี่ยวข้องหลายโครงการในภาษาอื่น ๆ ที่ใช้ Doxygen แนวคิดคือใช้เอาต์พุต Doxygen XML และป้อนให้กับ Sphinx เพื่อสร้าง API ของคุณ ดังนั้นคุณสามารถรักษาความดีทั้งหมดของ Doxygen และรวมระบบเอกสารใน Sphinx ยอดเยี่ยมในทางทฤษฎี ตอนนี้ในทางปฏิบัติครั้งสุดท้ายที่ฉันตรวจสอบโครงการยังไม่พร้อมสำหรับการผลิต
  • pydoctor *: โดยเฉพาะอย่างยิ่ง สร้างเอาต์พุตของตัวเอง มีการรวมพื้นฐานบางอย่างกับ Sphinx และคุณสมบัติที่ดีบางอย่าง

คำสั่งใช้ autoapi คืออะไร ฉันได้แก้ไข conf.py เพื่อรวมโมดูล autoapi ขณะนี้ฉันใช้งาน "sphinx-apidoc -o apidocs --full"
Sandeep

คุณไม่จำเป็นต้องมีคำสั่งเพิ่มเติม เพียงสร้างเอกสาร Sphinx ของคุณโดยใช้ sphinx-build ฉันรวมเข้ากับ Tox แบบนี้: github.com/HPENetworking/cookiecutter_python/blob/module/…
Havok

@Havok ฉันไม่เห็นว่าAutoAPIเป็น "อัตโนมัติเต็มรูปแบบ" อย่างไรเมื่อฉันต้องใส่องค์ประกอบทั้งหมดของโมดูลลงใน__all__ตัวแปร Explicite
buhtz

20

Sphinx ส่วนใหญ่เป็นเครื่องมือในการจัดรูปแบบเอกสารที่เขียนขึ้นโดยไม่ขึ้นกับซอร์สโค้ดอย่างที่ฉันเข้าใจ

สำหรับการสร้างเอกสาร API จาก docstrings หลามเครื่องมือชั้นนำpdocและpydoctor นี่คือ pydoctor ของสร้างเอกสาร API สำหรับการบิดและบาซาร์

แน่นอนว่าหากคุณต้องการดู docstrings ในขณะที่คุณกำลังทำงานกับสิ่งต่างๆมีเครื่องมือบรรทัดคำสั่ง " pydoc " และhelp()ฟังก์ชันที่มีอยู่ในตัวแปลแบบโต้ตอบ


2
เป็นเรื่องจริงที่สฟิงซ์ใช้เอกสารที่เขียนขึ้นโดยอิสระจากซอร์สโค้ดเป็นฐาน แต่การใช้ส่วนขยาย autodoc สามารถรวม docstrings จากโมดูล python ได้อย่างง่ายดาย เนื่องจากลักษณะไดนามิกของมันฉันพบว่าเอกสารที่เขียนด้วยมือสำหรับโมดูล python มีประโยชน์มากกว่าเอกสาร api ที่สร้างขึ้น
Peter Hoffmann

3
เอกสาร "เขียนด้วยมือ" ไม่สามารถใช้งานได้เมื่อคุณพยายามรวบรวมโครงสร้างและความสัมพันธ์ระหว่างชั้นเรียนในโครงการที่แทบไม่มีเอกสาร
ЯрославРахматуллин

13

เป็นเครื่องมือที่เอกสารอื่น ๆ ที่ดีมากคือสฟิงซ์ มันจะใช้สำหรับเอกสาร python 2.6 ที่กำลังจะมาถึงและถูกใช้โดยdjangoและโครงการ python อื่น ๆ อีกมากมาย

จากเว็บไซต์สฟิงซ์:

  • รูปแบบผลลัพธ์ : HTML (รวมถึงวิธีใช้ HTML ของ Windows) และ LaTeX สำหรับเวอร์ชัน PDF ที่พิมพ์ได้
  • การอ้างอิงโยงอย่างกว้างขวาง : มาร์กอัปเชิงความหมายและลิงก์อัตโนมัติสำหรับฟังก์ชันคลาสศัพท์อภิธานศัพท์และข้อมูลที่คล้ายกัน
  • โครงสร้างลำดับชั้น : คำจำกัดความง่ายๆของโครงสร้างเอกสารพร้อมลิงก์อัตโนมัติไปยังพี่น้องพ่อแม่และลูก
  • ดัชนีอัตโนมัติ : ดัชนีทั่วไปและดัชนีโมดูล
  • การจัดการโค้ด : การไฮไลต์อัตโนมัติโดยใช้ปากกาเน้นข้อความ Py เซ็กเมนต์
  • ส่วนขยาย : การทดสอบข้อมูลโค้ดโดยอัตโนมัติการรวม docstrings จากโมดูล Python และอื่น ๆ

11
ได้ลองใช้แล้ว. ในขณะที่สฟิงซ์เป็นเครื่องมือที่น่าสนใจมาก แต่ก็ไม่ใช่สิ่งที่ฉันคาดหวังว่าจะมาจาก doxygen เครื่องมือเพิ่มเติมสำหรับเอกสารของลูกค้าที่ดีจริงๆ doxygen นั้นดีกว่ามากสำหรับนักออกแบบ SW ที่ต้องการดูภาพรวม API ในรูปแบบที่พิมพ์ได้ดี
Zane

3
@ Zane ฉันเห็นด้วย ในฐานะคนรัก Doxygen ฉันพลาดวิธีการสร้างคู่มืออ้างอิง API อัตโนมัติมากเกินไป ตรวจสอบคำตอบของฉันเนื่องจากขณะนี้มีตัวเลือกอื่น ๆ
Havok
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.