Tôi đã đọc tài liệu về các điểm vào trứng trong Pylons và trên các trang Đỉnh, và tôi vẫn không thực sự hiểu. Ai đó có thể giải thích chúng cho tôi?
Tôi đã đọc tài liệu về các điểm vào trứng trong Pylons và trên các trang Đỉnh, và tôi vẫn không thực sự hiểu. Ai đó có thể giải thích chúng cho tôi?
Câu trả lời:
"Điểm vào" thường là một hàm (hoặc đối tượng giống như hàm có thể gọi khác) mà nhà phát triển hoặc người dùng gói Python của bạn có thể muốn sử dụng, mặc dù cũng có thể cung cấp một đối tượng không thể gọi được như một điểm nhập cảnh (chính xác chỉ ra trong các ý kiến!).
Loại điểm nhập phổ biến nhất là điểm nhập console_scripts , trỏ đến một chức năng mà bạn muốn có sẵn dưới dạng công cụ dòng lệnh cho bất cứ ai cài đặt gói của bạn. Điều này đi vào setup.py của bạn như:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
Tôi có một gói tôi vừa triển khai có tên là "cursive.tools" và tôi muốn nó có sẵn một lệnh "khó hiểu" mà ai đó có thể chạy từ dòng lệnh, như:
$ cursive --help
usage: cursive ...
Cách để làm điều này là xác định một hàm, giống như có thể là hàm "cursive_command" trong cursive / tools / cmd.py trông giống như:
def cursive_command():
args = sys.argv[1:]
if len(args) < 1:
print "usage: ..."
và kể từ đó trở đi; cần giả định rằng nó được gọi từ dòng lệnh, phân tích các đối số mà người dùng đã cung cấp và ... tốt, làm bất cứ điều gì lệnh được thiết kế để làm.
Cài đặt gói docutils cho một ví dụ tuyệt vời về việc sử dụng điểm nhập cảnh: nó sẽ cài đặt một cái gì đó giống như một nửa tá lệnh hữu ích để chuyển đổi tài liệu Python sang các định dạng khác.
EntryPoints cung cấp cơ chế đăng ký tên đối tượng liên tục, dựa trên hệ thống tập tin và cơ chế nhập đối tượng trực tiếp dựa trên tên (được triển khai bởi gói setuptools ).
Chúng liên kết tên của các đối tượng Python với các định danh dạng tự do. Vì vậy, bất kỳ mã nào khác sử dụng cùng cài đặt Python và biết mã định danh có thể truy cập một đối tượng có tên liên quan, bất kể đối tượng được xác định ở đâu. Các tên liên quan có thể là bất kỳ tên nào tồn tại trong mô-đun Python ; ví dụ tên của một lớp, hàm hoặc biến. Cơ chế điểm vào không quan tâm tên gọi là gì, miễn là có thể nhập được.
Ví dụ: hãy sử dụng (tên của) một hàm và mô-đun python tưởng tượng với tên đủ điều kiện 'myns.mypkg.mymodule':
def the_function():
"function whose name is 'the_function', in 'mymodule' module"
print "hello from the_function"
Điểm vào được đăng ký thông qua khai báo điểm vào trong setup.py. Để đăng ký the_factor dưới mục nhập được gọi là 'my_ep_func':
entry_points = {
'my_ep_group_id': [
'my_ep_func = myns.mypkg.mymodule:the_function'
]
},
Như ví dụ cho thấy, các điểm vào được nhóm lại; có API tương ứng để tra cứu tất cả các điểm vào thuộc một nhóm (ví dụ bên dưới).
Khi cài đặt gói (ví dụ: chạy 'python setup.py install'), khai báo trên được phân tích cú pháp bởi setuptools. Sau đó nó ghi thông tin được phân tích cú pháp trong tập tin đặc biệt. Sau đó, API pkg_resource (một phần của setuptools) có thể được sử dụng để tra cứu điểm nhập cảnh và truy cập (các) đối tượng với (các) tên liên quan:
import pkg_resources
named_objects = {}
for ep in pkg_resources.iter_entry_points(group='my_ep_group_id'):
named_objects.update({ep.name: ep.load()})
Ở đây, setuptools đọc thông tin điểm vào được ghi trong các tệp đặc biệt. Nó đã tìm thấy điểm vào, nhập mô-đun (myns.mypkg.mymodule) và lấy ra hàm_định nghĩa được xác định ở đó, khi gọi tới pkg_resource.load ().
Giả sử không có đăng ký điểm vào nào khác cho cùng một id nhóm, việc gọi hàm_feft sẽ đơn giản:
>>> named_objects['my_ep_func']()
hello from the_function
Do đó, mặc dù có thể hơi khó nắm bắt lúc đầu, cơ chế điểm vào thực sự khá đơn giản để sử dụng. Nó cung cấp một công cụ hữu ích để phát triển phần mềm Python có thể cắm được.
EntryPoints
liên kết là cũ, mặc dù lời giải thích rất rõ ràng.
Theo quan điểm trừu tượng, các điểm vào được sử dụng để tạo ra một sổ đăng ký toàn hệ thống các hàm gọi Python thực hiện các giao diện nhất định. Có các API trong pkg_resource để xem điểm nhập nào được quảng cáo bởi một gói nhất định cũng như API để xác định gói nào quảng cáo một điểm nhập nhất định.
Điểm vào rất hữu ích để cho phép một gói sử dụng các plugin nằm trong gói khác. Chẳng hạn, dự án Paste của Ian Bicking sử dụng rộng rãi các điểm vào. Trong trường hợp này, bạn có thể viết một gói quảng cáo nhà máy ứng dụng WSGI của nó bằng cách sử dụng điểm vào paste.app_factory
.
Một cách sử dụng khác cho các điểm vào là liệt kê tất cả các gói trên hệ thống cung cấp một số chức năng plugin. Các TurboGears khuôn khổ web sử dụng các python.templating.engines
điểm vào để tìm kiếm các thư viện khuôn mẫu đã được cài đặt và có sẵn.
setup.py
hoàn toàn không chứaentry_points
.