পাইথন এন্ট্রি পয়েন্ট ব্যাখ্যা কর?


181

আমি পাইলনেস এবং পিক পৃষ্ঠায় ডিমের প্রবেশের পয়েন্টগুলিতে ডকুমেন্টেশন পড়েছি এবং আমি এখনও বুঝতে পারি না। কেউ আমাকে সেগুলি ব্যাখ্যা করতে পারে?

উত্তর:


168

একটি "এন্ট্রি পয়েন্ট" সাধারণত একটি ফাংশন (বা অন্য কলযোগ্য ফাংশন-জাতীয় বস্তু) যা আপনার পাইথন প্যাকেজটির বিকাশকারী বা ব্যবহারকারী হয়ত ব্যবহার করতে চান, যদিও একটি কল-নাযোগ্য বস্তুটি প্রবেশের পয়েন্ট হিসাবে সরবরাহ করা যেতে পারে (সঠিকভাবে) মন্তব্যগুলিতে নির্দেশিত!)।

সর্বাধিক জনপ্রিয় ধরণের এন্ট্রি পয়েন্ট হ'ল কনসোল_স্ক্রিপ্টস এন্ট্রি পয়েন্ট, যা এমন কোনও ফাংশনকে নির্দেশ করে যা আপনি আপনার প্যাকেজটি ইনস্টল করেন এমন কমান্ড-লাইন সরঞ্জাম হিসাবে উপলব্ধ করতে চান। এটি আপনার সেটআপের মধ্যে চলে py

entry_points={
    'console_scripts': [
        'cursive = cursive.tools.cmd:cursive_command',
    ],
},

আমার একটি প্যাকেজ রয়েছে যা আমি "ক্রেসিভ.টুলস" নামে সবেমাত্র নিযুক্ত করেছি এবং আমি চেয়েছিলাম যে এটি একটি "সাসিভ" কমান্ডটি সরবরাহ করবে যা কমান্ড লাইন থেকে কেউ চালাতে পারে, যেমন:

$ cursive --help
usage: cursive ...

এটি করার উপায়টি কোনও ক্রিয়াকলাপটিকে সংজ্ঞায়িত করা হয়, যেমনটি সম্ভবত "ক্রেসিভ_কম্যান্ড" ফাংশন যেমন ক্রাইভ / সরঞ্জাম / সেমিডি.পি.

def cursive_command():
    args = sys.argv[1:]
    if len(args) < 1:
        print "usage: ..."

এবং তাই ঘোষণা; এটি ধরে নেওয়া উচিত যে এটি কমান্ড লাইন থেকে আহ্বান করা হয়েছে, ব্যবহারকারী প্রদত্ত যুক্তিগুলি পার্স করুন এবং ... ভাল, কমান্ডটি যেভাবে ডিজাইন করা হয়েছে তা করুন।

এন্ট্রি-পয়েন্ট ব্যবহারের দুর্দান্ত উদাহরণের জন্য ডকুমেন্টিলস প্যাকেজটি ইনস্টল করুন : এটি পাইথন ডকুমেন্টেশনটিকে অন্য ফর্ম্যাটে রূপান্তর করার জন্য অর্ধ-ডজন দরকারী কমান্ডের মতো কিছু ইনস্টল করবে।


3
বর্তমান ডকুমেন্টস 'মোটেও setup.pyনেই entry_points
ম্যাট উইলকি

2
এটি একটি দুর্দান্ত উত্তর কারণ এটি একক প্রবেশ_পয়েন্ট গ্রুপের নাম ভাগ করে নেওয়ার একাধিক প্রকল্পের শক্তি প্রদর্শন করে যা "কনসোল_স্ক্রিপ্টস"। এই উত্তরটির সাথে পেট্রি আরও সাধারণ উত্তরের সাথে তুলনা করুন। আপনি দেখতে পাবেন যে কনসোল_স্ক্রিপ্টগুলি পেতে এবং তার চারপাশে একটি শেল র‌্যাপার তৈরি করার জন্য সেটআপলগুলি অবশ্যই এই pkg_resources প্রক্রিয়াটি ব্যবহার করবে। উৎসাহিতকরণ? এগুলো ব্যবহার করো. এগুলি কেবল কনসোল_স্ক্রিপ্টের চেয়ে ভাল।
ব্রুনো ব্রোনোস্কি 11'15

188

এন্ট্রিপয়েন্টগুলি একটি অবিরাম, ফাইল সিস্টেম-ভিত্তিক অবজেক্টের নাম নিবন্ধকরণ এবং নাম-ভিত্তিক সরাসরি অবজেক্ট আমদানি প্রক্রিয়া সরবরাহ করে ( সেটআপলগুলি প্যাকেজ দ্বারা প্রয়োগ করা হয় )।

তারা পাইথন অবজেক্টের নাম ফ্রি-ফর্ম শনাক্তকারীদের সাথে যুক্ত করে। সুতরাং একই পাইথন ইনস্টলেশন ব্যবহার করে এবং শনাক্তকারীকে জানার সাথে অন্য কোনও কোড সম্পর্কিত নামের সাথে কোনও বস্তু অ্যাক্সেস করতে পারে, যেখানেই বিষয়টি নির্ধারিত নয়। যুক্ত নামের কোন একটি পাইথন মডিউল বিদ্যমান নাম হতে পারে ; উদাহরণস্বরূপ কোনও শ্রেণি, ফাংশন বা ভেরিয়েবলের নাম। এন্ট্রি পয়েন্ট প্রক্রিয়াটি যতক্ষণ তা আমদানিযোগ্য ততক্ষণ নামটি কী বোঝায় তা বিবেচনা করে না।

উদাহরণস্বরূপ, আসুন একটি ফাংশন (এর নাম), এবং একটি সম্পূর্ণ-যোগ্য নাম 'মায়েন্স.মিপকেজি.মোডিউল' সহ একটি কাল্পনিক পাইথন মডিউল ব্যবহার করুন:

def the_function():
   "function whose name is 'the_function', in 'mymodule' module"
   print "hello from the_function"

এন্ট্রি পয়েন্টগুলি সেটআপ.পিতে একটি এন্ট্রি পয়েন্ট ঘোষণার মাধ্যমে নিবন্ধিত হয়। 'My_ep_func' নামক এন্ট্রিপয়েন্টের অধীনে কাজটির নিবন্ধকরণ করতে:

    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 পুনরুদ্ধার করে।

ধরে নিই যে একই গ্রুপ আইডির জন্য অন্য কোনও প্রবেশ পয়েন্ট রেজিস্ট্রেশন নেই, তাহলে __ ফাংশনটি কল করা সহজ হবে:

>>> named_objects['my_ep_func']()
hello from the_function

সুতরাং, প্রথমে কিছুটা উপলব্ধি করা সম্ভবত কিছুটা কঠিন হলেও, এন্ট্রি পয়েন্ট প্রক্রিয়াটি ব্যবহার করা আসলে বেশ সহজ। এটি প্লাগেবল পাইথন সফ্টওয়্যার বিকাশের জন্য একটি দরকারী সরঞ্জাম সরবরাহ করে।


4
এই সমস্ত প্রক্রিয়াতে 'আমার_প_ফুনক' নামটি কোথায় ব্যবহৃত হয়? এটি pkg_resources পুনরুক্তি দ্বারা কোনও কিছুর জন্য ব্যবহার করা হবে বলে মনে হয় না।
কামিল কিসিয়েল

2
@ কামিলকিসিল: এখানে উদাহরণের জন্য ব্যবহৃত উদাহরণে, প্রবেশের স্থানটির নামটি অবশ্যই কোনও কিছুর জন্য ব্যবহৃত হয় না, প্রয়োজনও হয় না; এন্ট্রি পয়েন্টের নাম কোনও কিছুর জন্য ব্যবহৃত হবে কিনা তা প্রয়োগের উপর নির্ভর করে। নামটি কেবল এন্ট্রি পয়েন্ট উদাহরণের নামের বৈশিষ্ট্য হিসাবে উপলব্ধ ।
পেট্রি

3
আমি মনে করি যে এপি.নামাটি বাতিল করে নামভিত্তিক প্রকল্পগুলি অভিধানের পরিবর্তে একটি তালিকা তৈরি করা বিভ্রান্তিকর ছিল তাই আমি উত্তরটি সম্পাদনা করেছি। উত্তরটি কোথায় পাওয়া যাবে এবং এটি 'the_function' বা 'my_ep_func' হওয়ার প্রত্যাশা করা উচিত কিনা উভয়ই উত্তরটি দেখায়। অন্যথায় পাঠককে অন্য কোথাও অতিরিক্ত ডকুমেন্টেশন খুঁজে পেতে হয়েছিল। এটি একটি দুর্দান্ত উত্তর এবং আমি এন্ট্রি_পয়েন্টগুলির সংক্ষিপ্ত, স্পষ্ট ব্যাখ্যা যা আমি কখনও দেখেছি!
ব্রুনো ব্রোনোস্কি 21 '21

3
আমি গিথুবে একটি প্রকল্প তৈরি করেছি যা এই ধারণাটি প্রদর্শন করে। github.com/RichhardBronosky/entryPoint_demo
ব্রুনো ব্রোনোস্কি

1
এটি এন্ট্রি পয়েন্টগুলির একটি খুব স্পষ্ট ব্যাখ্যা, যা আপনি বিশদ ব্যাখ্যার জন্য। EntryPointsযদিও ব্যাখ্যা খুব স্পষ্ট লিঙ্ক, সতেজ নয়।
রাহুল নায়ার

18

অ্যাবস্ট্রাক্ট দৃষ্টিকোণ থেকে, প্রবেশপথগুলি পাইথন কলযোগ্যগুলির সিস্টেম-ব্যাপী রেজিস্ট্রি তৈরি করতে ব্যবহৃত হয় যা নির্দিষ্ট ইন্টারফেস প্রয়োগ করে। কোন প্যাকেজ নির্দিষ্ট প্রবেশ বিন্দুতে বিজ্ঞাপন দেয় তা নির্ধারণ করার জন্য প্রদত্ত প্যাকেজ দ্বারা কোন এন্ট্রি পয়েন্টগুলি বিজ্ঞাপন দেওয়া হয় তা দেখার জন্য পি কেজি_সোর্সগুলিতে এপিআই রয়েছে।

একটি প্যাকেজটিকে অন্য প্যাকেজে থাকা প্লাগইনগুলি ব্যবহার করার অনুমতি দেওয়ার জন্য এন্ট্রি পয়েন্টগুলি কার্যকর। উদাহরণস্বরূপ, আয়ান বাইকিংয়ের আটকানো প্রকল্পটি এন্ট্রি পয়েন্টগুলি ব্যাপকভাবে ব্যবহার করে। এই ক্ষেত্রে, আপনি এমন একটি প্যাকেজ লিখতে পারেন যা এন্ট্রি পয়েন্ট ব্যবহার করে এর ডাব্লুএসজিআই অ্যাপ্লিকেশন কারখানার বিজ্ঞাপন দেয় paste.app_factory

এন্ট্রি পয়েন্টগুলির জন্য আরেকটি ব্যবহার হ'ল সিস্টেমের সমস্ত প্যাকেজগুলি গণনা করা যা কিছু প্লাগইন কার্যকারিতা সরবরাহ করে। TurboGears ওয়েব ফ্রেমওয়ার্ক ব্যবহার python.templating.enginesইনস্টল এবং উপলব্ধ করা হয় টেমপ্লেট লাইব্রেরি সন্ধান করার এন্ট্রি পয়েন্ট।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.