Nếu bạn muốn thực hiện một gói, bạn phải hiểu như thế nào Python dịch tên tệp thành tên mô-đun.
Tệp mymodule.py
sẽ có sẵn dưới dạng mymodule
, giả sử trình thông dịch tìm thấy nó trong một thư mục trong đường dẫn tìm kiếm Python. Nếu bạn đang sử dụng hệ thống tệp phân biệt chữ hoa chữ thường, nó cũng có thể được nhập bằng cách viết hoa khác (nhưng bạn nên tránh sử dụng hành vi phụ thuộc vào hệ thống).
Gói là thư mục có tệp __init__.py
trong đó. Đã có một số chuyển động gần đây cho phép các gói không có các tệp đó, nhưng tôi sẽ bỏ qua trường hợp ít phổ biến hơn cho câu trả lời này. Một gói sẽ trở thành một mô-đun bên trong Python, với mã của nó đến từ tệp __init__.py
. Vì vậy, các tập tin mypackage/__init__.py
có thể được nhập khẩu là mypackage
.
Không có ý nghĩa đối với tệp __init__.py
trực tiếp trong đường dẫn tìm kiếm Python (tốt, tôi cho rằng bạn có thể nhập nó là mô-đun __init__
, nhưng điều này có thể là một ý tưởng tồi).
Vì vậy, đối với tình hình của bạn, đây là cách bố trí hệ thống tập tin thích hợp:
toplevel/
mymodule/
__init__.py # put code here for mymodule
submodule.py # put code here for mymodule.submodule
Chỉ có thư mục toplevel
phải ở trong đường dẫn tìm kiếm Python.
Tôi đã thấy không gian dân gian của Python đặt mã quan trọng trong 'mymodule/__ init __. Py', ví dụ: [Alex Martelli] (http://stackoverflow.com/a/2361278/188535), mà dường như là mâu thuẫn với điều này. (Không phải là tôi nhất thiết phải đồng ý với điều đó ...) – detly
Đó là sự thật. Một kiểu phổ biến hơn là đặt mã thực tế cho 'mymodule' vào một mô-đun con không có giấy tờ, sau đó nhập API công khai cho nó vào' __init __. Py'. – Blckknght
cảm ơn câu trả lời thông tin. Thật đáng tiếc là python cần những hacks bẩn như vậy để làm một điều hiển nhiên. –