स्व-निहित रनटाइम
Apothem का इंजन किसी भी checkout से कैसे चलता है — आंतरिक की गई निर्भरताएँ, PYTHONPATH=src आह्वान मॉडल, और प्लगइन-ट्री बूटस्ट्रैप।
स्व-निहित रनटाइम
Apothem का इंजन एक स्व-निहित रनटाइम है: यह रजिस्ट्री-रहित होकर, किसी भी checkout या
रखे गए स्रोत वृक्ष से सीधे चलता है, क्योंकि इसकी तृतीय-पक्ष निर्भरताएँ इसके साथ
यात्रा करती हैं। दो हिस्से इसे संभव बनाते हैं — एक आंतरिक की गई निर्भरता वृक्ष, और
एक python -m आह्वान मॉडल जिसे किसी संस्थापित कंसोल स्क्रिप्ट की आवश्यकता नहीं
होती।
आंतरिक की गई निर्भरता वृक्ष
सत्यापन और क्रमबद्धीकरण स्टैक को src/apothem/_vendor/ के अंतर्गत शुद्ध-Python
स्रोत के रूप में आंतरिक किया गया है, प्रत्येक पैकेज अपनी उद्गम लाइसेंस फ़ाइल के
साथ-साथ:
yaml(शुद्ध-Python पार्सर/एमिटर; वैकल्पिक libyaml C एक्सटेंशन साथ नहीं लाया जाता)jsonschema, अपनी निर्भरता शृंखलाattrs(और इसकेattrउपनाम),referencing, औरjsonschema_specificationsके साथrpds— एक शुद्ध-Python शिम जोjsonschemaऔरreferencingद्वारा प्रयुक्तHashTrieMap,HashTrieSet, औरListसतह को पुनः-कार्यान्वित करता है, अंतर्निर्मित प्रकारों द्वारा समर्थित, ताकि स्टैक शून्य संकलित एक्सटेंशन के साथ चलेtyping_extensions
आंतरिक की गई प्रतियाँ किसी भी सिस्टम-संस्थापित संस्करण पर अधिमान्यता रखती हैं:
बूटस्ट्रैप vendor डायरेक्टरी को site-packages से आगे, sys.path के अग्रभाग में
रखता है। चयन नीति — क्या आंतरिक किया जाता है, क्या नहीं, और आंतरिक किए गए पैकेज कैसे
ताज़ा किए जाते हैं — निर्भरता आंतरिकीकरण रणनीति
में प्रलेखित है।
दो निर्भरताएँ वृक्ष के बाहर रहती हैं: click और rich, टर्मिनल-मुखी
पुस्तकालय जिन्हें CLI आयात करता है। उन्हें इंजन चलाने वाले इंटरप्रेटर के अंतर्गत
आयात-योग्य होना चाहिए; संस्थापक दोनों की जाँच करते हैं, किसी भी अनुपस्थित को नाम
देते हैं, और इसे आपके लिए संस्थापित करने का प्रस्ताव देते हैं — आपकी पुष्टि के साथ,
या --yes / APOTHEM_AUTO_INSTALL_DEPS=1 के साथ स्वतः।
python -m आह्वान मॉडल
Apothem जानबूझकर pyproject.toml में कोई कंसोल स्क्रिप्ट घोषित नहीं करता — कंसोल
स्क्रिप्ट केवल तभी अस्तित्व में होती हैं जब कोई पैकेज प्रबंधक उन्हें PATH पर रखता
है, और स्व-निहित रनटाइम कभी किसी की कल्पना नहीं करता। इंजन के पास इसके बजाय दो आह्वान
सतहें हैं:
| सतह | आह्वान | संदर्भ |
|---|---|---|
| इंजन CLI | python -m apothem <command> | PYTHONPATH पर src/ वाला एक स्रोत वृक्ष (checkout, npx कैश, प्लगइन ट्री) |
| हुक रनटाइम | python "<harness-root>/apothem/hooks/dispatch.py" <event> | हार्नेस रूट के अंतर्गत साकार की गई प्रति, निरपेक्ष पथ द्वारा |
python -m apothemsrc/apothem/__main__.pyचलाता है, जोapothem.cli:main— Click कमांड समूह — को कॉल करता है।- साकार किए गए
settings.json/hooks.jsonमें हुक प्रविष्टियाँ डिस्पैचर (और, Claude Code के लिए,<harness-root>/apothem/conformity/gate.pyपर संगति गेट) को निरपेक्ष स्क्रिप्ट पथ द्वारा आह्वान करती हैं। दोनों स्वायत्त stdlib स्क्रिप्ट हैं जो अपना स्वयं काsys.pathबूटस्ट्रैप करती हैं, और गेट की स्कीमा फ़िक्स्चर इसके साथ-साथ<harness-root>/apothem/schemas/में यात्रा करती हैं, ताकि हुक होस्ट पर किसी आयात-योग्यapothemपैकेज के बिना चलें। टेम्पलेट एक${HARNESS_ROOT}टोकन ले जाते हैं जिसेapothem installफ़ॉरवर्ड-स्लैश रूप में असली हार्नेस-रूट पथ में रेंडर करता है। - एक स्रोत checkout से, मॉड्यूल रूप
python -m apothem.hooks.dispatchऔरpython -m apothem.conformity.gateविकास के लिए वही कोड चलाते हैं।
checkout की src/ डायरेक्टरी को PYTHONPATH के अग्रभाग में रखकर पैकेज डायरेक्टरी
आयात-योग्य बन जाती है:
PYTHONPATH="$HOME/.apothem/src" python -m apothem <command>यह ठीक वही आह्वान है जिसे एक-शॉट संस्थापक पूर्णता पर प्रिंट करता है।
प्लगइन-ट्री बूटस्ट्रैप
Claude Code प्लगइन PYTHONPATH पर निर्भर रहने के बजाय इंजन को
<plugin_root>/lib/apothem के अंतर्गत बंडल करता है। बूटस्ट्रैप मॉड्यूल
apothem.lib.plugin_bootstrap bootstrap_syspath को उजागर करता है, जो
तत्समकपूर्वक <plugin_root>/lib और vendor डायरेक्टरी को sys.path के अग्रभाग में
रखता है ताकि import apothem और प्रत्येक आंतरिक की गई निर्भरता प्लगइन ट्री से
समाधानित हो। एक विकृत वृक्ष (lib/ अनुपस्थित) किसी बासी सिस्टम प्रति को चुपचाप
आयात करने के बजाय PluginBootstrapError उठाता है।
संस्थापक डिस्क पर क्या रखता है
स्क्रिप्ट संस्थापक स्रोत वृक्ष का एक git क्लोन ~/.apothem पर
(APOTHEM_HOME से अधिभावित) रखते हैं और उससे इंजन चलाते हैं — वैकल्पिक click /
rich पूर्वापेक्षा प्रस्ताव के परे site-packages में कोई Python पैकेज संस्थापित
नहीं होते। क्लोन पूर्ण रिपॉज़िटरी है, जिसमें वह परीक्षण सुइट और प्रलेखन साइट शामिल
हैं जिन्हें रनटाइम कभी आयात नहीं करता, दो सोच-समझकर लिए गए कारणों से: इंजन अपनी
cohort — नियम, कौशल, कमांड, और टेम्पलेट — को वृक्ष से सीधे प्रत्येक हार्नेस में
साकार करता है, ताकि वृक्ष केवल एक रनटाइम के बजाय सत्य का जीवंत स्रोत हो; और
.git डायरेक्टरी अपनी जगह बनी रहती है ताकि apothem update पुनः-डाउनलोड करने के
बजाय मौजूदा क्लोन को फ़ास्ट-फ़ॉरवर्ड करे।
यह स्रोत-से-चलाने वाला अभिन्यास वही पैटर्न है जिसे nvm, pyenv, और oh-my-zsh
जैसे उपकरण उपयोग करते हैं — कुछ मेगाबाइट स्रोत और इतिहास, अनइंस्टॉलर के साथ एक चरण
में हटाने योग्य (खोलने के लिए कोई सिस्टम स्थिति नहीं है)। एक पतली पदचिह्न — एक उथला
या विरल checkout जो tests/ और site/ को छोड़ता है — संभव है, परंतु यह यथास्थान,
हस्ताक्षर-सत्यापित, git-आधारित अद्यतन पथ को व्यापार में दे देगी; वर्तमान अभिन्यास
न्यूनतम डिस्क के बजाय एक सरल, सत्यापन-योग्य अद्यतन को वरीयता देता है।
रनटाइम Python को कैसे खोजता है
एक-शॉट संस्थापक और npx शिम एक इंटरप्रेटर को उसी तरह से ढूँढते हैं: python3,
python, संस्करणित नाम (python3.14 से python3.10 तक), और Windows पर py -3
को जाँचते हैं; Microsoft Store लांचर शिम को अस्वीकार करते हैं; और संस्करण 3.10 या
नवीनतर रिपोर्ट करने वाले पहले अभ्यर्थी को स्वीकार करते हैं। जब किसी स्रोत वृक्ष से
चलाया जाता है, संस्थापक बंडल किए गए hooks/lib/find-python लोकेटर का पुनः-उपयोग
करते हैं, जो वही न्यूनतम सीमा लागू करता है।
अनुशंसित अगला कदम
python -m apothem --help चलाएँ जिसमें checkout की src/ डायरेक्टरी
PYTHONPATH पर हो, ताकि यह पुष्टि हो सके कि स्व-निहित CLI पथ आपके होस्ट पर समाधानित
होता है।