
Call Map का वर्तमान विकास https://github.com/ajylee/call_map पर होता है। Call Map Python कॉल ग्राफ़ को नेविगेट करने के लिए एक टूल है।
.. default-role:: code
Call Map, Python में कॉल ग्राफ़्स को नेविगेट करने के लिए एक उपकरण है, जिसमें अन्य
भाषाओं का समर्थन करने की योजना है। नीचे call_map -m toolz चलाने के बाद, फिर
कुछ फ़ंक्शनों पर क्लिक करने के बाद का स्क्रीनशॉट है।
.. figure:: docs/UI-clicked-on-function.png
जबकि Call Map का उद्देश्य किसी कोडबेस की सामान्य समझ हासिल करने में मदद करना है, यह कोड पथों का पता लगाने के लिए भी स्वाभाविक रूप से उपयुक्त है, जो एक महत्वपूर्ण सुरक्षा चिंता का विषय है। कई सुरक्षा समस्याएँ ऐसा कोड पथ खोजने से उजागर होती हैं जो उपयोगकर्ता इनपुट को खतरनाक कोडिंग पैटर्न से जोड़ता है।
अधिक जानकारी के लिए ब्लॉग पोस्ट__ देखें।
Call Map को Python 3.5 के लिए एक पायथन पैकेज के रूप में वितरित किया जाता है। स्थापित करने के लिए
pip3, चलाएँ::
pip3 install -e .
ध्यान दें कि कुछ Python 3 वितरण पैकेज प्रबंधक को pip कहते हैं, और कुछ
इसे pip3 कहते हैं, इसलिए आपको pip3 को pip से बदलने की आवश्यकता हो सकती है।
उपरोक्त कमांड से निष्पादन योग्य call_map उसी पथ पर स्थापित हो जाना चाहिए
जहाँ Python इंटरप्रेटर स्थित है।
विवरण और वैकल्पिक तरीकों के लिए INSTALL.rst देखें।
खोज शुरू करने के लिए फ़ाइलें खोलें::
call_map -f example.py
call_map -f *.py
आप मॉड्यूल खोज पथ (sys.path) में भी जोड़ सकते हैं:
call_map -f *.py -p .
Call Map फ़ाइलों को मॉड्यूल के रूप में हल करने का प्रयास करेगा जब भी वे पाई जा सकें
मॉड्यूल खोज पथ में। कमांड लाइन तर्कों के अधिक दस्तावेज़ीकरण के लिए,
call_map -h देखें।
Call Map को कॉन्फ़िगर करने के लिए, पर्यावरण चर CALL_MAP_RC_DIRECTORY सेट करें। Call Map कॉन्फ़िगरेशन फ़ाइल का पथ होगा::
$CALL_MAP_RC_DIRECTORY/call_map_rc.py
इस समय कॉन्फ़िगरेशन विकल्प हैं:
open_in_editor(path: pathlib.Path, line: int): यदि आप इस फ़ंक्शन को परिभाषित करते हैं
तो जब भी आप कोई फ़ाइल खोलेंगे इसे कॉल किया जाएगा। उदाहरण के लिए, निम्नलिखित का उपयोग
Emacs सर्वर में फ़ाइलें खोलने के लिए किया जा सकता है, यदि आपने एक चल रहे
Emacs सत्र में server-mode को कॉल किया है::
def open_in_editor(path, line): import subprocess as sbp sbp.call(['emacsclient', '+{}'.format(line), str(path)])
निम्नलिखित का उपयोग GVim सर्वर में फ़ाइलें खोलने के लिए किया जा सकता है, यदि आपने
gvim --servername my_vim_server के साथ GVim सर्वर शुरू किया है::
def open_in_editor(path, line): import subprocess as sbp sbp.call(['gvim', '--servername', 'my_vim_server', '--remote', '+{}'.format(line), str(path)])
MULTITHREADING: GUI और कॉल ग्राफ़ की खोज के लिए एक अलग थ्रेड का उपयोग करना है या नहीं।
डिफ़ॉल्ट True है। इसे बंद करना डिबग उद्देश्यों के लिए है।
UI डिज़ाइन में कुछ विचित्रताएँ हैं, इस तथ्य के कारण कि मैंने कोई बेहतर समाधान नहीं खोजा है या अतिरिक्त जटिलता का समझौता प्रतिकूल है।
उपयोग एक से अधिक बार दिखाई दे सकते हैं, लेकिन वास्तव में वे एक ही स्कोप में अलग-अलग उपयोग हैं।
आप देख सकते हैं कि help, id, और filter जैसे कुछ बिल्ट-इन
अनदेखा कर दिए जाते हैं। अनदेखे किए गए फ़ंक्शनों की पूरी सूची के लिए स्रोत कोड में
call_map/config.py देखें।
यदि हाइलाइट किया जाने वाला स्थान किसी फ़ाइल की शुरुआत में है, तो वह हाइलाइट नहीं होगा। ऐसा इसलिए है क्योंकि सामान्यतः केवल मॉड्यूल और स्क्रिप्ट अपनी-अपनी फ़ाइलों की शुरुआत में स्थित होते हैं।
कुछ विचित्रताएँ jedi Python विश्लेषण बैकएंड से विरासत में मिली हैं।
उपयोगों के लिए खोज दायरा उन मॉड्यूलों का समूह है जिन्हें
jedi बैकएंड द्वारा लोड किया गया है। इसका मतलब है कि जैसे ही आप नए
मॉड्यूलों का अन्वेषण करेंगे, दायरा बदल जाएगा। यदि आप किसी मॉड्यूल को स्पष्ट रूप से खोज दायरे में शामिल करना चाहते हैं, तो
उसे निरीक्षण किए जाने वाले मॉड्यूलों की प्रारंभिक सूची में जोड़ें।
jedi हमेशा इंटरप्रेटर के sys.path को खोजता है, भले ही वह स्पष्ट रूप से
शामिल न हो। हालाँकि, यह उपयोगकर्ता-परिभाषित sys_path को प्राथमिकता देगा।
स्टेटिक विश्लेषण बैकएंड के लिए मौजूद कोई भी सावधानी Call Map पर भी लागू होती है। (इस
समय केवल jedi बैकएंड को Call Map में एकीकृत किया गया है।)
Python विश्लेषण के लिए jedi बैकएंड हमेशा सभी उपयोगों को नहीं खोजता। Python की
गतिशील प्रकृति स्टेटिक विश्लेषण से किसी फ़ंक्शन की परिभाषा का हमेशा निर्धारण करना
असंभव बना देती है। कभी-कभी jedi एक कॉल को कई
संभावित फ़ंक्शनों में हल करता है। उदाहरण के लिए os.path.abspath प्लेटफ़ॉर्म पर निर्भर करता है। इस
मामले में call_map दोनों संभावनाओं को abspath और abspath (2) के रूप में सूचीबद्ध करता है।
jedi सभी कॉल और उपयोगों को भी हल नहीं करता। Jedi का अपना दस्तावेज़ीकरण भी
सावधानियों की सूची__ रखता है।
कभी-कभी जब Jedi किसी एक आइटम का विश्लेषण करते समय त्रुटि फेंकता है, तो त्रुटि अन्य आइटमों को प्रभावित करती है। उदाहरण के लिए, उपयोगों को खोजते समय, यदि Jedi एक उपयोग पर त्रुटि उठाता है, तो उसके द्वारा खोजे गए अन्य उपयोग पुनर्प्राप्त करने योग्य नहीं रह सकते हैं (Jedi v0.10.0 तक)।
__ https://jedi.readthedocs.io/en/latest/docs/features.html#caveats