मैंने Pylons और पीक पृष्ठों पर अंडे के प्रवेश बिंदुओं पर प्रलेखन पढ़ा है, और मुझे अभी भी वास्तव में समझ नहीं आया है। क्या कोई उन्हें मुझे समझा सकता है?
मैंने Pylons और पीक पृष्ठों पर अंडे के प्रवेश बिंदुओं पर प्रलेखन पढ़ा है, और मुझे अभी भी वास्तव में समझ नहीं आया है। क्या कोई उन्हें मुझे समझा सकता है?
जवाबों:
एक "एंट्री पॉइंट" आम तौर पर एक फ़ंक्शन (या अन्य कॉल करने योग्य फ़ंक्शन-लाइक ऑब्जेक्ट) है जो आपके पायथन पैकेज के एक डेवलपर या उपयोगकर्ता का उपयोग करना चाह सकता है, हालांकि एक गैर-कॉल करने योग्य ऑब्जेक्ट को प्रवेश बिंदु के रूप में (सही रूप में) भी आपूर्ति की जा सकती है टिप्पणियों में बताया!)।
प्रवेश बिंदु का सबसे लोकप्रिय प्रकार कंसोल_स्क्रिप्स एंट्री पॉइंट है, जो एक फ़ंक्शन को इंगित करता है जिसे आप कमांड-लाइन टूल के रूप में उपलब्ध कराना चाहते हैं जो कोई भी आपके पैकेज को स्थापित करता है। यह आपके setup.py में जाता है:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
मेरे पास एक पैकेज है जिसे मैंने केवल "कर्सिवटूल" कहा है, और मैं चाहता था कि यह एक "कर्सिव" कमांड उपलब्ध कराए, जिसे कोई भी कमांड लाइन से चला सके, जैसे:
$ cursive --help
usage: cursive ...
ऐसा करने का तरीका एक फ़ंक्शन को परिभाषित करता है, जैसे कि शायद शापित / उपकरण / cmd.py में "सरसरी_कमांड" फ़ंक्शन ऐसा लगता है:
def cursive_command():
args = sys.argv[1:]
if len(args) < 1:
print "usage: ..."
इत्यादि; यह मान लेना चाहिए कि इसे कमांड लाइन से बुलाया गया है, उपयोगकर्ता द्वारा प्रदान किए गए तर्कों को पार्स करें, और ... ठीक है, जो भी कमांड करने के लिए डिज़ाइन किया गया है वह करें।
स्थापित docutils प्रवेश बिंदु उपयोग की एक महान उदाहरण के लिए पैकेज: यह अन्य स्वरूपों के लिए अजगर प्रलेखन परिवर्तित करने के लिए एक आधा दर्जन उपयोगी आदेशों की तरह कुछ स्थापित हो जाएगा।
एंट्रीपॉइंट्स एक निरंतर, फ़ाइल-सिस्टम-आधारित ऑब्जेक्ट नाम पंजीकरण और नाम-आधारित प्रत्यक्ष ऑब्जेक्ट आयात तंत्र ( सेट-अप पैकेज द्वारा कार्यान्वित ) प्रदान करते हैं।
वे पायथन ऑब्जेक्ट्स के नामों को फ्री-फॉर्म आइडेंटिफ़ायर के साथ जोड़ते हैं। तो एक ही पायथन इंस्टॉलेशन का उपयोग करने वाला कोई भी कोड और पहचानकर्ता को किसी वस्तु को संबंधित नाम से एक्सेस कर सकते हैं, चाहे वह कोई भी वस्तु क्यों न हो। जुड़े नाम किसी भी एक पायथन मॉड्यूल में मौजूदा नाम हो सकता है ; उदाहरण के लिए एक वर्ग, फ़ंक्शन या चर का नाम। प्रविष्टि बिंदु तंत्र को परवाह नहीं है कि नाम क्या संदर्भित करता है, जब तक कि यह आयात करने योग्य है।
एक उदाहरण के रूप में, आइए एक फ़ंक्शन का उपयोग करें (एक के नाम पर), और एक काल्पनिक अजगर मॉड्यूल के साथ एक पूर्ण-योग्य नाम 'myns.mypkg.mymodule':
def the_function():
"function whose name is 'the_function', in 'mymodule' module"
print "hello from the_function"
प्रविष्टि बिंदुओं को एक प्रविष्टि बिंदुओं के माध्यम से setup.py में पंजीकृत किया जाता है। 'My_ep_func' नामक एंट्रीपॉइंट के तहत the_function रजिस्टर करने के लिए:
entry_points = {
'my_ep_group_id': [
'my_ep_func = myns.mypkg.mymodule:the_function'
]
},
जैसा कि उदाहरण से पता चलता है, प्रवेश बिंदु समूहबद्ध हैं; एक समूह से संबंधित सभी प्रवेश बिंदुओं को देखने के लिए संबंधित एपीआई है (उदाहरण के लिए नीचे)।
एक पैकेज इंस्टालेशन पर (यानी 'पायथन सेटअप ओरोमो इनस्टॉल' चल रहा है), उपरोक्त घोषणा सेटपूल द्वारा पार्स की गई है। यह तब विशेष फ़ाइल में पार्स की गई जानकारी लिखता है। उसके बाद, pkg_resources API ( सेप्टुपूल का हिस्सा) का उपयोग प्रवेश बिंदु को देखने और संबंधित नाम (ओं) के साथ ऑब्जेक्ट (ओं) तक पहुंचने के लिए किया जा सकता है:
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()})
यहां, सेटटॉप्स ने प्रवेश बिंदु की जानकारी पढ़ी जो विशेष फाइलों में लिखी गई थी। इसने प्रवेश बिंदु पाया, मॉड्यूल (myns.mypkg.mymodule) को आयात किया, और pkg_resources.load () पर कॉल करने पर वहां परिभाषित the_function को पुनः प्राप्त किया।
मान लें कि एक ही समूह आईडी के लिए कोई अन्य प्रवेश बिंदु पंजीकरण नहीं थे, तो the_function को कॉल करना सरल होगा:
>>> named_objects['my_ep_func']()
hello from the_function
इस प्रकार, जबकि पहली बार में समझ पाना थोड़ा मुश्किल है, प्रवेश बिंदु तंत्र वास्तव में उपयोग करने के लिए काफी सरल है। यह प्लगेबल पायथन सॉफ्टवेयर विकास के लिए एक उपयोगी उपकरण प्रदान करता है।
EntryPoints
हालांकि स्पष्टीकरण बहुत स्पष्ट है लिंक, पुराना है।
सार बिंदु से, प्रवेश बिंदुओं का उपयोग पाइथन कॉलिबल के एक सिस्टम-वाइड रजिस्ट्री को बनाने के लिए किया जाता है जो कुछ इंटरफेस को लागू करते हैं। Pkg_resources में API हैं, यह देखने के लिए कि कौन से एंट्री पॉइंट्स किसी दिए गए पैकेज द्वारा विज्ञापित किए जाते हैं और साथ ही APIs यह निर्धारित करने के लिए कि कौन से पैकेज एक निश्चित एंट्री पॉइंट का विज्ञापन करते हैं।
एंट्री पॉइंट एक पैकेज के उपयोग के लिए उपयोगी होते हैं जो अन्य पैकेज में प्लगइन्स का उपयोग करते हैं। उदाहरण के लिए, इयान बेकिंग की पेस्ट परियोजना में प्रवेश बिंदुओं का बड़े पैमाने पर उपयोग किया गया है। इस स्थिति में, आप एक पैकेज लिख सकते हैं जो एंट्री पॉइंट का उपयोग करके अपने WSGI एप्लिकेशन कारखाने का विज्ञापन करता है paste.app_factory
।
प्रवेश बिंदुओं के लिए एक और उपयोग सिस्टम पर सभी पैकेजों की गणना कर रहा है जो कुछ प्लगइन कार्यक्षमता प्रदान करते हैं। TurboGears वेब रूपरेखा का उपयोग करता है python.templating.engines
कि स्थापित किया है और उपलब्ध कर रहे हैं templating पुस्तकालयों को देखने के लिए प्रवेश बिंदु।
setup.py
बिल्कुल नहीं हैentry_points
।