ฉันอ่านเอกสารเกี่ยวกับจุดเริ่มต้นไข่ใน Pylons และบนหน้า Peak และฉันก็ยังไม่เข้าใจจริงๆ มีใครช่วยอธิบายพวกเขาให้ฉันได้บ้าง
ฉันอ่านเอกสารเกี่ยวกับจุดเริ่มต้นไข่ใน Pylons และบนหน้า Peak และฉันก็ยังไม่เข้าใจจริงๆ มีใครช่วยอธิบายพวกเขาให้ฉันได้บ้าง
คำตอบ:
โดยทั่วไปแล้ว "จุดเข้าใช้งาน" คือฟังก์ชั่น (หรือวัตถุที่คล้ายฟังก์ชั่น callable อื่น ๆ ) ที่นักพัฒนาหรือผู้ใช้ของแพ็คเกจ Python ของคุณอาจต้องการใช้ถึงแม้ว่าวัตถุที่ไม่สามารถเรียกได้สามารถกำหนดให้เป็นจุดเข้าใช้งานได้เช่นกัน ชี้ให้เห็นในความคิดเห็น!)
ชนิดจุดเข้าที่นิยมมากที่สุดคือจุดเข้าconsole_scriptsซึ่งชี้ไปยังฟังก์ชันที่คุณต้องการให้พร้อมใช้งานเป็นเครื่องมือบรรทัดคำสั่งเพื่อใครก็ตามที่ติดตั้งแพ็คเกจของคุณ สิ่งนี้จะเข้าสู่ setup.py ของคุณเช่น:
entry_points={
'console_scripts': [
'cursive = cursive.tools.cmd:cursive_command',
],
},
ฉันมีแพคเกจที่ฉันเพิ่งปรับใช้เรียกว่า "cursive.tools" และฉันต้องการให้มีคำสั่ง "cursive" ที่ใครบางคนสามารถเรียกใช้จากบรรทัดคำสั่งเช่น:
$ cursive --help
usage: cursive ...
วิธีการทำเช่นนี้คือการกำหนดฟังก์ชั่นเช่นอาจเป็นฟังก์ชั่น "cursive_command" ใน cursive / tools / cmd.py ที่ดูเหมือนว่า:
def cursive_command():
args = sys.argv[1:]
if len(args) < 1:
print "usage: ..."
และอื่น ๆ ; มันควรจะสันนิษฐานว่ามันถูกเรียกจากบรรทัดคำสั่งแยกอาร์กิวเมนต์ที่ผู้ใช้ได้ให้และ ... ดีทำสิ่งที่คำสั่งถูกออกแบบมาให้ทำ
ติดตั้งแพ็กเกจdocutilsเพื่อเป็นตัวอย่างที่ยอดเยี่ยมในการใช้งานจุดเริ่มต้น: มันจะติดตั้งคำสั่งที่เป็นประโยชน์สำหรับการแปลงเอกสาร Python เป็นรูปแบบอื่น
EntryPointsจัดเตรียมการลงทะเบียนชื่ออ็อบเจ็กต์แบบอิงระบบไฟล์และกลไกการนำเข้าอ็อบเจ็กต์โดยตรงตามชื่อ (ใช้งานโดยแพ็กเกจsetuptools )
พวกเขาเชื่อมโยงชื่อของวัตถุ Python กับตัวระบุรูปแบบอิสระ ดังนั้นรหัสอื่น ๆ ที่ใช้การติดตั้ง Python เดียวกันและรู้ว่าตัวระบุสามารถเข้าถึงวัตถุที่มีชื่อที่เกี่ยวข้องไม่ว่าวัตถุจะถูกกำหนดไว้ที่ใด ชื่อที่เกี่ยวข้องสามารถเป็นชื่อใด ๆ ที่มีอยู่ในโมดูลหลาม ; ตัวอย่างเช่นชื่อของคลาสฟังก์ชั่นหรือตัวแปร กลไก entry point ไม่สนใจสิ่งที่ชื่ออ้างถึงตราบใดที่สามารถอิมพอร์ตได้
ตัวอย่างเช่นลองใช้ (ชื่อ) ฟังก์ชั่นและโมดูลหลามจินตภาพที่มีชื่อครบถ้วน 'myns.mypkg.mymodule':
def the_function():
"function whose name is 'the_function', in 'mymodule' module"
print "hello from the_function"
จุดเข้าใช้งานจะถูกลงทะเบียนผ่านการประกาศจุดเข้าใช้งานใน setup.py ในการลงทะเบียน the_function ภายใต้ entrypoint ชื่อ 'my_ep_func':
entry_points = {
'my_ep_group_id': [
'my_ep_func = myns.mypkg.mymodule:the_function'
]
},
ดังตัวอย่างที่แสดงจุดเข้าใช้งานจะถูกจัดกลุ่ม มี API ที่สอดคล้องกันเพื่อค้นหาจุดเข้าใช้งานทั้งหมดที่อยู่ในกลุ่ม (ตัวอย่างด้านล่าง)
เมื่อทำการติดตั้งแพ็คเกจ (เช่นการเรียกใช้ 'python setup.py install') การประกาศข้างต้นจะถูกวิเคราะห์โดย setuptools จากนั้นเขียนข้อมูลที่วิเคราะห์คำในไฟล์พิเศษ หลังจากนั้นpkg_resources API (ส่วนหนึ่งของ setuptools) สามารถใช้เพื่อค้นหาจุดเข้าใช้งานและเข้าถึงวัตถุด้วยชื่อที่เกี่ยวข้อง:
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()})
ที่นี่ setuptools อ่านข้อมูลจุดเริ่มต้นที่เขียนในไฟล์พิเศษ พบจุดเริ่มต้นนำเข้าโมดูล (myns.mypkg.mymodule) และดึงข้อมูล the_function ที่กำหนดไว้ที่นั่นเมื่อเรียกไปที่ pkg_resources.load ()
สมมติว่าไม่มีการลงทะเบียนจุดเข้าใช้งานอื่น ๆ สำหรับรหัสกลุ่มเดียวกันการเรียกใช้ฟังก์ชัน __ ฟังก์ชันจะง่าย:
>>> named_objects['my_ep_func']()
hello from the_function
ดังนั้นในขณะที่อาจจะเข้าใจได้ยากในตอนแรกกลไกจุดเข้าใช้งานนั้นค่อนข้างใช้งานง่าย เป็นเครื่องมือที่มีประโยชน์สำหรับการพัฒนาซอฟต์แวร์ Python
EntryPoints
การเชื่อมโยงจะค้าง แต่คำอธิบายที่มีความชัดเจนมาก
จากมุมมองแบบนามธรรมจุดเข้าใช้เพื่อสร้างรีจิสตรีของระบบของ Pables callables ที่ใช้อินเตอร์เฟสบางตัว มี API ใน pkg_resources เพื่อดูว่าจุดเข้าใช้งานใดที่โฆษณาโดยแพ็คเกจที่กำหนดรวมถึง API เพื่อกำหนดแพ็คเกจที่โฆษณาจุดเข้าใช้งานบางจุด
จุดเริ่มต้นมีประโยชน์สำหรับการอนุญาตให้หนึ่งแพ็คเกจใช้ปลั๊กอินที่อยู่ในแพ็คเกจอื่น ตัวอย่างเช่นโครงการวางของ Ian Bicking ใช้จุดเข้าใช้อย่างกว้างขวาง ในกรณีนี้คุณสามารถเขียนแพคเกจที่ประกาศว่าโรงงานแอพลิเคชัน WSGI paste.app_factory
โดยใช้จุดเริ่มต้นที่
การใช้งานสำหรับจุดเข้าใช้งานก็คือการระบุแพ็คเกจทั้งหมดในระบบที่มีฟังก์ชั่นปลั๊กอิน TurboGearsกรอบเว็บใช้python.templating.engines
จุดเริ่มต้นที่จะมองขึ้นห้องสมุดแม่แบบที่มีการติดตั้งและสามารถใช้ได้
setup.py
ไม่ได้มีentry_points
เลย