2012-09-12 26 views
6

Tôi thừa kế một codebase khá lớn mà tôi muốn tạo tài liệu html cho. Vì nó được viết bằng Python, tôi quyết định sử dụng nhân sư vì người dùng mã đã quen với thiết kế và chức năng của tài liệu python được tạo bằng nhân sư. Tôi đã sử dụng lệnh sphinx-apidoc để tự động tạo tệp rst. Tôi đã nhập đường dẫn mô-đun vào sys.path để nhân sư có thể tìm thấy mã.Nhân sư có chạy mã của tôi khi thực thi 'make html' không?

Cho đến nay rất tốt. Tuy nhiên, khi tôi cố gắng tạo html bằng cách sử dụng lệnh make html, có nhiều tracebacks bật lên và một số ví dụ trong codebase dường như được thực hiện. Điều gì có thể là lý do cho điều đó và làm thế nào tôi có thể ngăn chặn điều đó xảy ra?

+1

Ví dụ trong cơ sở mã, như, mã sau '__main__'? Hoặc doctests (bạn biết đấy, kiểm tra trong một docstring)? –

+0

Câu hỏi hay. Tôi ngần ngại chạy nó một lần nữa. Lệnh chính xác cho sphinx-apidoc là: 'sphinx-apidoc -f -F -o. ../ src' theo sau bởi 'make html'. Điều đó có bắt đầu thực hiện doctests không? Nếu vậy, làm thế nào tôi có thể ngăn chặn nó làm điều đó? – AME

+1

(1) kiểm tra xem bạn có một số mã trong '__main__'; (2) nếu bạn không sử dụng phần mở rộng ['doctest'] (http://sphinx.pocoo.org/ext/doctest.html), bạn nên kết thúc. Kiểm tra tệp cấu hình của bạn để đảm bảo. –

Trả lời

8

Khi sử dụng autodoc, Nhân sư nhập các mô-đun được ghi lại, do đó, tất cả mã cấp mô-đun được thực thi. Điều này xảy ra mỗi khi bạn thực hiện "make html". Theo nghĩa đó, Nhân sư làm "chạy" mã của bạn.

Bạn có thể phải tổ chức mã của mình hơi khác một chút để làm cho các lỗi biến mất (chuyển mã cấp mô-đun thành các hàm). Xem this question để biết ví dụ về những gì có thể xảy ra.

Đây là phỏng đoán của tôi nhưng có thể không phải là toàn bộ câu chuyện. Thật khó để nói nhiều hơn nếu không có thêm thông tin.

0
def main(): 

    print('hello world') 

if __name__ == '__main__': 

    main() 

Bằng cách này mã của bạn sẽ không chạy.

+0

Một chút giải thích có thể sẽ giúp OP và những người khác –

Các vấn đề liên quan