Skip to content
Apothem
आर्किटेक्चर

स्व-निहित रनटाइम

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 पर रखता है, और स्व-निहित रनटाइम कभी किसी की कल्पना नहीं करता। इंजन के पास इसके बजाय दो आह्वान सतहें हैं:

सतहआह्वानसंदर्भ
इंजन CLIpython -m apothem <command>PYTHONPATH पर src/ वाला एक स्रोत वृक्ष (checkout, npx कैश, प्लगइन ट्री)
हुक रनटाइमpython "<harness-root>/apothem/hooks/dispatch.py" <event>हार्नेस रूट के अंतर्गत साकार की गई प्रति, निरपेक्ष पथ द्वारा
  • python -m apothem src/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 पथ आपके होस्ट पर समाधानित होता है।

On this page