Cách ghi lại mã Python bằng Doxygen [đã đóng]


94

Tôi thích Doxygen để tạo tài liệu về mã C hoặc PHP. Tôi có một dự án Python sắp tới và tôi nghĩ rằng tôi nhớ rằng Python không có /* .. */nhận xét và cũng có cơ sở tự lập tài liệu riêng của nó, đây dường như là cách tuyệt vời để lập tài liệu.

Vì tôi đã quen với Doxygen, làm cách nào tôi có thể sử dụng nó để tạo tài liệu Python của mình? Có điều gì đặc biệt mà tôi cần biết không?

Câu trả lời:


62

Điều này được ghi lại trên trang web doxygen , nhưng để tóm tắt ở đây:

Bạn có thể sử dụng doxygen để ghi lại mã Python của mình. Bạn có thể sử dụng cú pháp chuỗi tài liệu Python:

"""@package docstring
Documentation for this module.

More details.
"""

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

    More details.
    """
    pass

Trong trường hợp đó, các nhận xét sẽ được trích xuất bởi doxygen, nhưng bạn sẽ không thể sử dụng bất kỳ lệnh doxygen đặc biệt nào .

Hoặc bạn có thể (tương tự như các ngôn ngữ kiểu C trong doxygen) nhân đôi dấu nhận xét ( #) trên dòng đầu tiên trước thành viên:

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

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

Trong trường hợp đó, bạn có thể sử dụng các lệnh doxygen đặc biệt. Không có chế độ đầu ra Python cụ thể, nhưng bạn rõ ràng có thể cải thiện kết quả bằng cách đặt OPTMIZE_OUTPUT_JAVAthành YES.

Thành thật mà nói, tôi hơi ngạc nhiên về sự khác biệt - có vẻ như một khi doxygen có thể phát hiện các nhận xét trong khối ## hoặc khối "" ", hầu hết công việc sẽ được thực hiện và bạn có thể sử dụng các lệnh đặc biệt trong Cả hai trường hợp. Có thể họ mong đợi những người sử dụng "" "tuân thủ các thực hành tài liệu Pythonic nhiều hơn và điều đó sẽ ảnh hưởng đến các lệnh doxygen đặc biệt?


57
Nhận xét dưới dạng tài liệu bằng Python là không tốt. Nhận xét dành cho người bảo trì mô-đun (tại sao và cách triển khai). Tất cả tài liệu phải ở dạng docstrings (cách sử dụng).
jfs 13/09/08

4
Python sẽ lấy các bình luận và sử dụng chúng dưới dạng docstrings, vì vậy cả hai định dạng đều hoạt động với pydoc.
docwhat

10
Hãy xem doxypy giúp bạn có thể sử dụng các lệnh đặc biệt bên trong docstrings bình thường.
Mauro

83

Bộ lọc đầu vào doxypy cho phép bạn sử dụng gần như tất cả các thẻ định dạng của Doxygen ở định dạng docstring Python tiêu chuẩn. Tôi sử dụng nó để ghi lại một khung ứng dụng trò chơi C ++ và Python hỗn hợp lớn và nó hoạt động tốt.


2
Thật buồn rằng câu trả lời này, là điều đúng cho câu hỏi, cũng là ở phía dưới :(
Dave Lasley

9
Bạn cũng có thể muốn xem doxypypy vì nó sẽ chuyển đổi các chuỗi doc của Pythonic thành thứ mà Doxygen có thể sử dụng.
Feneric

8
Doxypy dường như đã chết và biến mất ..
naught101

24

Cuối cùng, bạn chỉ có hai lựa chọn:

Bạn tạo nội dung của mình bằng Doxygen hoặc bạn tạo nội dung của mình bằng Sphinx *.

  1. Doxygen : Nó không phải là công cụ được lựa chọn cho hầu hết các dự án Python. Nhưng nếu bạn phải xử lý các dự án liên quan khác được viết bằng C hoặc C ++ thì điều đó có thể có ý nghĩa. Đối với điều này, bạn có thể cải thiện sự tích hợp giữa Doxygen và Python bằng doxypypy .

  2. Sphinx : Công cụ defacto để ghi lại một dự án Python. Bạn có ba tùy chọn ở đây: thủ công, bán tự động (tạo sơ khai) và hoàn toàn tự động (giống Doxygen).

    1. Đối với tài liệu API thủ công, bạn có Sphinx autodoc . Điều này thật tuyệt khi viết một hướng dẫn sử dụng với các phần tử được tạo API nhúng.
    2. Đối với bán tự động, bạn có Sphinx autosummary . Bạn có thể thiết lập hệ thống xây dựng của mình để gọi sphinx-autogen hoặc thiết lập Sphinx của bạn với autosummary_generatecấu hình. Bạn sẽ yêu cầu thiết lập một trang với tính năng tự động, sau đó chỉnh sửa các trang theo cách thủ công. Bạn có các tùy chọn, nhưng kinh nghiệm của tôi với cách tiếp cận này là nó đòi hỏi quá nhiều cấu hình và cuối cùng, ngay cả sau khi tạo các mẫu mới, tôi vẫn tìm thấy lỗi và không thể xác định chính xác cái gì được hiển thị là API công khai và cái gì không. Ý kiến ​​của tôi là công cụ này tốt cho thế hệ sơ khai sẽ yêu cầu chỉnh sửa thủ công và không có gì hơn. Giống như một phím tắt để kết thúc trong thủ công.
    3. Hoàn toàn tự động. Điều này đã bị chỉ trích nhiều lần và trong thời gian dài, chúng tôi đã không có một trình tạo API Python hoàn toàn tự động tốt được tích hợp với Sphinx cho đến khi AutoAPI xuất hiện, đó là một đứa trẻ mới trong khối. Đây là cách tốt nhất cho việc tạo API tự động bằng Python (lưu ý: tự quảng cáo không biết xấu hổ).

Có các tùy chọn khác cần lưu ý:

  • Hít thở : đây bắt đầu là một ý tưởng rất hay và có ý nghĩa khi bạn làm việc với một số dự án liên quan bằng các ngôn ngữ khác sử dụng Doxygen. Ý tưởng là sử dụng đầu ra Doxygen XML và cung cấp nó cho Sphinx để tạo API của bạn. Vì vậy, bạn có thể giữ tất cả những gì tốt đẹp của Doxygen và thống nhất hệ thống tài liệu trong Sphinx. Tuyệt vời về mặt lý thuyết. Bây giờ, trong thực tế, lần cuối cùng tôi kiểm tra dự án chưa sẵn sàng để sản xuất.
  • pydoctor *: Rất đặc biệt. Tạo đầu ra của riêng nó. Nó có một số tích hợp cơ bản với Sphinx và một số tính năng hay.

Lệnh sử dụng autoapi là gì. Tôi đã sửa đổi conf.py để bao gồm các mô-đun autoapi. Hiện tại, tôi chạy "sphinx-apidoc -o apidocs --full."
Sandeep

Bạn không cần thêm một lệnh. Chỉ cần xây dựng tài liệu Sphinx của bạn bằng cách sử dụng sphinx-build. Tôi đã tích hợp nó với Tox như thế này: github.com/HPENetworking/cookiecutter_python/blob/module/…
Havok

@Havok Tôi không thấy AutoAPI "Hoàn toàn tự động" như thế nào khi tôi phải đặt tất cả các phần tử của mô-đun vào __all__biến explicite.
buhtz

20

Sphinx chủ yếu là một công cụ để định dạng tài liệu được viết độc lập với mã nguồn, theo tôi hiểu.

Để tạo ra các tài liệu API từ docstrings Python, các công cụ hàng đầu là pdocpydoctor . Đây là tài liệu API do pydoctor tạo cho TwistedBazaar .

Tất nhiên, nếu bạn chỉ muốn xem các docstrings trong khi đang làm việc, có công cụ dòng lệnh " pydoc " và cũng như help()chức năng có sẵn trong trình thông dịch tương tác.


2
Đúng là sphinx sử dụng các tài liệu được viết độc lập với mã nguồn làm cơ sở, nhưng bằng cách sử dụng phần mở rộng autodoc, người ta có thể dễ dàng bao gồm docstrings từ các mô-đun python. Do tính chất động của nó, tôi thấy tài liệu viết tay cho mô-đun python hữu ích hơn tài liệu api được tạo.
Peter Hoffmann

3
Tài liệu "viết tay" không có sẵn khi bạn đang cố tìm hiểu cấu trúc và mối quan hệ giữa các lớp trong một số dự án khó được ghi chép lại.
Ярослав Рахматуллин

13

Một công cụ tài liệu rất tốt khác là nhân sư . Nó sẽ được sử dụng cho tài liệu python 2.6 sắp tới và được sử dụng bởi django và rất nhiều dự án python khác.

Từ trang web của nhân sư:

  • Định dạng đầu ra : HTML (bao gồm Windows HTML Help) và LaTeX, dành cho các phiên bản PDF có thể in
  • Tham khảo chéo mở rộng : đánh dấu ngữ nghĩa và liên kết tự động cho các hàm, lớp, thuật ngữ thuật ngữ và các phần thông tin tương tự
  • Cấu trúc phân cấp : dễ dàng định nghĩa cây tài liệu, với các liên kết tự động đến anh chị em, cha mẹ và con cái
  • Chỉ mục tự động : chỉ mục chung cũng như chỉ mục mô-đun
  • Xử lý mã : tự động đánh dấu bằng cách sử dụng công cụ đánh dấu Py Phân khúc
  • Tiện ích mở rộng : kiểm tra tự động các đoạn mã, bao gồm các chuỗi doc từ các mô-đun Python, v.v.

11
Đã thử nó. Mặc dù bản thân nhân sư là một công cụ rất thú vị, nhưng nó không phải là thứ tôi mong đợi đến từ doxygen. Hơn một công cụ cho tài liệu khách hàng cuối thực sự tốt, doxygen tốt hơn nhiều cho một nhà thiết kế SW, những người chỉ muốn xem tổng quan về API ở một định dạng có thể in đẹp.
Zane

3
@Zane Tôi đồng ý. Là một người yêu Doxygen, tôi đã bỏ lỡ quá nhiều việc tạo hướng dẫn tham chiếu API hoàn toàn tự động. Kiểm tra câu trả lời của tôi vì một số tùy chọn khác hiện có sẵn.
Havok
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.