Tôi là người mới sử dụng gói quản lý python, và chắc chắn đã làm điều gì sai. Tôi đã khuyến khích để tạo ra một cấu trúc thư mục như sau:Cách cấu trúc các gói python mà không lặp lại tên cấp cao nhất để nhập
bagoftricks
├── bagoftricks
│ ├── bagoftricks
│ │ ├── __init__.py
│ │ └── bagoftricks.py
│ └── __init__.py
├── README.md
└── setup.py
bagoftricks.py chứa hai chức năng, levenshtein()
và geofind()
.
Tôi muốn gọi những as:
import bagoftricks
x = bagoftricks.levenshtein(arg1,arg2)
Thay vào đó, tôi thấy tôi phải làm điều này:
import bagoftricks
x = bagoftricks.bagoftricks.levenshtein(arg1,arg2)
Có cách nào tốt hơn để tổ chức gói của tôi ở nơi đầu tiên, mà không có sự dư thừa đặt tên?
CẬP NHẬT
Vì vậy, tôi làm theo hướng dẫn Avichal Badaya của dưới đây, và loại bỏ một mức độ làm tổ. Đó là, bây giờ tôi phải ...
bagoftricks
├── bagoftricks
│ ├── __init__.py
│ └── bagoftricks.py
├── README.md
└── setup.py
Tuy nhiên, để gọi gói này, tôi vẫn còn có ...
from bagoftricks.bagoftricks import geofind()
hoặc
import bagoftricks
sau đó
>>> bagoftricks.bagoftricks.geofind()
Thay vì mong muốn ....
from bagoftricks import geofind()
hoặc
import bagoftricks
>>> bagoftricks.geofind()
tôi không thể loại bỏ thêm rằng lớp làm tổ. Khi tôi cố gắng, bằng cách tương tự, để loại bỏ một mức độ làm tổ, do đó mô-đun của tôi là bằng phẳng, như:
bagoftricks
├── __init__.py
├── bagoftricks.py
├── README.md
└── setup.py
tôi không thể xây dựng các gói ở tất cả ...
$ python setup.py build
running build
running build_py
error: package directory 'bagoftricks' does not exist
gì là bí mật cho nhập khẩu tự nhiên như gói tiêu chuẩn sử dụng, không cần nhập khẩu tên cấp cao?
Cảm ơn, điều đó rõ ràng và hữu ích, đặc biệt là mẹo về cách phát triển nó một cách hiệu quả và đúng đắn. Vấn đề chắc chắn là tuyên bố __init__.py của tôi sau đó. Tôi không hoàn toàn hiểu nơi nó ngồi trong hệ thống phân cấp và nơi để đặt nó để rút ngắn cuộc gọi. Hoạt động hoàn hảo. Cảm ơn! – Mittenchops