Phân phối tập tin python duy nhất: mô-đun hoặc gói?


24

Giả sử tôi có một hàm hoặc lớp python hữu ích (hoặc bất cứ thứ gì) được gọi là useful_thingtồn tại trong một tệp duy nhất. Có hai cách cần thiết để tổ chức cây nguồn. Cách đầu tiên sử dụng một mô-đun duy nhất:

- setup.py
- README.rst
- ...etc...
- foo.py

nơi useful_thingđược định nghĩa trong foo.py. Chiến lược thứ hai là tạo ra một gói:

- setup.py
- README.rst
- ...etc...
- foo
|-module.py
|-__init__.py

nơi useful_thingđược định nghĩa trong module.py. Trong trường hợp gói __init__.pysẽ như thế này

from foo.module import useful_thing

để trong cả hai trường hợp bạn có thể làm from foo import useful_thing.

Câu hỏi: Cách nào được ưa thích, và tại sao?

EDIT: Vì người dùng gnat nói rằng câu hỏi này được hình thành kém, tôi sẽ thêm rằng hướng dẫn đóng gói python chính thức dường như không bình luận về phương pháp nào được mô tả ở trên là phương pháp được ưa thích. Tôi rõ ràng không đưa ra danh sách ưu và nhược điểm cá nhân vì tôi quan tâm đến việc liệu có phương pháp ưa thích nào của cộng đồng không, không tạo ra cuộc thảo luận về ưu / nhược điểm :)


Chia sẻ nghiên cứu của bạn giúp mọi người . Hãy cho chúng tôi những gì bạn đã cố gắng và tại sao nó không đáp ứng nhu cầu của bạn. Điều này chứng tỏ rằng bạn đã dành thời gian để cố gắng tự giúp mình, nó giúp chúng tôi tránh nhắc lại các câu trả lời rõ ràng và hầu hết nó giúp bạn có được câu trả lời cụ thể và phù hợp hơn. Xem thêm Cách hỏi
gnat

1
@gnat: Cảm ơn bạn đã liên kết đến cách hỏi. Tôi nhận thức được câu hỏi thực hành tốt, nhưng trong trường hợp này tôi không nghĩ rằng việc đưa ra kinh nghiệm của mình là phù hợp vì điều đó có thể sẽ biến những gì tôi đã hỏi như một câu hỏi "A hoặc B" rõ ràng thành một ý kiến ​​cho ý kiến. Làm thế nào bạn sẽ đề nghị cải thiện câu hỏi này mà không làm cho nó dựa trên ý kiến?
DanielSank

@gnat: Nói cách khác, nếu tôi quan tâm đến danh sách ưu / nhược điểm của hai phương pháp, tôi sẽ hỏi "Ưu và nhược điểm của hai phương pháp này là gì" và sẽ bao gồm danh sách một phần của riêng tôi.
DanielSank

Câu trả lời:


17

Bạn làm điều đơn giản nhất phù hợp với bạn .

Đối với một mô-đun một chức năng , hoàn toàn không có điểm nào trong việc tạo ra một gói. Các gói rất hữu ích để tạo một không gian tên bổ sung và / hoặc để tổ chức mã của bạn trên nhiều mô-đun.

Các mô-đun jsonunittesttrong thư viện chuẩn Python thực sự là các gói, ví dụ, cho mục đích tổ chức mã. Nhưng nó hoàn toàn ổn khi để lại mã hiện đang sống chỉ trong một tệp python, dưới dạng một mô-đun.

Nếu bạn muốn ví dụ:

Để có một ví dụ tốt về các dự án thực sự sử dụng các gói tuyệt vời, hãy xem:

Không có khuyến nghị 'chính thức'; cả hai tùy chọn là hoàn toàn hợp lệ.


Vì vậy, không có phương pháp chính thức ưa thích?
DanielSank

3
Không, không có phương pháp ưa thích.
Martijn Pieters
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.