मैं पायथन 3 से importlib.machinery.EXTENSION_SUFFIXES का उपयोग करना चाहता हूं लेकिन दुर्भाग्य से मैं पायथन 2.7 का उपयोग कर रहा हूं।

EXTENSION_SUFFIXES का मूल्यांकन ['.cpython-34m-x86_64-linux-gnu.so', '.cpython-34m.so', '.abi3.so', '.so'] होता है, लेकिन यह मेरी मशीन और संभवतः अजगर संस्करण के लिए विशिष्ट है, इसलिए मैं सूची को केवल हार्डकोड नहीं कर सकता।

यहाँ पर EXTENSION_SUFFIXES को Python 3 के स्रोत में बनाया गया है: https://github.com/python/cpython/blob/3.6/Lib/importlib/_bootstrap_external.py#L1431। हालांकि ऐसा लगता है कि यह सी कार्यान्वयन में नीचे जा रहा है (लिंक ), इसलिए मुझे यह स्पष्ट नहीं है कि मैं यह जानकारी कैसे प्राप्त कर सकता हूं।

मैं इस सूची को पायथन 2.7 में कैसे प्राप्त कर सकता हूं?

2
ty. 15 नवम्बर 2017, 22:24

1 उत्तर

सबसे बढ़िया उत्तर

इसके बजाय imp.get_suffixes() का उपयोग करें:

3-तत्व टुपल्स की एक सूची लौटाएं, प्रत्येक एक विशेष प्रकार के मॉड्यूल का वर्णन करता है। प्रत्येक ट्रिपल में फॉर्म (प्रत्यय, मोड, प्रकार) होता है, जहां प्रत्यय एक स्ट्रिंग है जिसे मॉड्यूल नाम में जोड़ने के लिए फ़ाइल नाम बनाने के लिए जोड़ा जाता है, मोड मोड स्ट्रिंग है जो अंतर्निहित ओपन() फ़ंक्शन को पास करने के लिए है फ़ाइल खोलें (यह पाठ फ़ाइलों के लिए 'r' या बाइनरी फ़ाइलों के लिए 'rb' हो सकता है), और प्रकार फ़ाइल प्रकार है, जिसमें नीचे वर्णित मान PY_SOURCE, PY_COMPILED, या C_EXTENSION में से एक है।

इस प्रकार, इसे सी एक्सटेंशन मॉड्यूल के लिए प्रत्ययों की सूची में फ़िल्टर करने के लिए:

import imp
extension_suffixes = [suffix for (suffix, mode, type) in imp.get_suffixes()
                             if type == imp.C_EXTENSION]

यह पायथन 3 में भी काम करता है, हालांकि imp को पायथन 3 में पदावनत किया गया है।

4
user2357112 supports Monica 15 नवम्बर 2017, 23:13