Mô-đun so với Gói?


140

Bất cứ khi nào tôi làm, from 'x' import 'y'tôi đã tự hỏi cái nào được coi là 'mô-đun' và đó là 'gói', và tại sao nó không phải là cách khác?


1
Về lý do tại sao không phải là cách khác, hãy xem stackoverflow.com/questions/3600352/ trên

1
Tôi, cho một, tôi biết ơn câu hỏi này, bởi vì câu trả lời ngắn gọn và cung cấp kiến ​​thức chính xác cần thiết. Tài liệu này rất ổn và đẹp, nhưng nó dài dòng và chứa nhiều thông tin hơn những gì OP yêu cầu, và chắc chắn là nhiều hơn tôi cần. Tôi chỉ muốn một câu trả lời cho câu hỏi cụ thể đó, và câu trả lời dưới đây chính xác là những gì tôi muốn. Nhiều người trong chúng ta không cần câu trả lời chính thức hoặc chuyên sâu như vậy.
Teekin

Một khái niệm liên quan cần biết - Các lớp so với các mô-đun trong Python
RBT

Câu trả lời:


192

Một mô-đun Python chỉ đơn giản là một tệp nguồn Python, có thể hiển thị các lớp, hàm và biến toàn cục.

Khi được nhập từ một tệp nguồn Python khác, tên tệp được coi là một không gian tên.

Gói Python chỉ đơn giản là một thư mục của mô-đun Python.

Ví dụ, hãy tưởng tượng cây thư mục sau trong /usr/lib/python/site-packages:

mypackage/__init__.py <-- this is what tells Python to treat this directory as a package
mypackage/mymodule.py

Vì vậy, sau đó bạn sẽ làm:

import mypackage.mymodule

hoặc là

from mypackage.mymodule import myclass

Aha, vì vậy khi bạn nói rằng tên tệp được coi là một không gian tên, bạn sẽ như thế nào đây? "Mymodule.var1" cho trường hợp đầu tiên, hay "mygroup.var1" cho trường hợp thứ hai?
Dark Templar

1
Không chính xác. Gói vẫn được tính là một phần của không gian tên. Nếu bạn muốn làm những gì bạn nói thì bạn cần phải làm từ mypackage nhập mymodule.
Yam Marcovic

Có thể hữu ích khi thêm một cái gì đó về các gói không gian tên, mà mã không nhất thiết phải xuất hiện trong cùng một cây thư mục.
Holdenweb

@keepenweb Không bao giờ sử dụng các cơ chế khác nhau liên quan trực tiếp đến đó, vì vậy không phải là một chuyên gia. Nếu bạn cung cấp một lời giải thích chi tiết về nó trong một câu trả lời mới, tôi sẽ đề cập đến nó từ tôi.
Yam Marcovic

Có lẽ là một chút quá bí truyền để có giá trị nó, nhìn lại
Holdenweb
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.