यह कार्यक्षमता importlib.machinery
module में पाई जा सकती है।
>>> set(importlib.machinery.SOURCE_SUFFIXES +
... importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES +
... importlib.machinery.EXTENSION_SUFFIXES +
... importlib.machinery.DEBUG_BYTECODE_SUFFIXES)
{'.pyw', '.py', '.pyd', '.pyc', '.pyo'}
>>>
आप हो सकता है:
>>> import importlib
>>> importlib.machinery.SOURCE_SUFFIXES
['.py', '.pyw']
>>> importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES
['.pyo']
>>> importlib.machinery.EXTENSION_SUFFIXES
['.pyd']
>>> importlib.machinery.DEBUG_BYTECODE_SUFFIXES
['.pyc']
>>>
तो, आप बहुत आसानी से एक वैश्विक सेट में इन शामिल हो सकते हैं: अंदर, वहाँ कई स्थिरांक जो विभिन्न पायथन मॉड्यूल एक्सटेंशन से संबंधित हैं all_suffixes
function में रुचि रखते हैं:
>>> importlib.machinery.all_suffixes()
['.py', '.pyw', '.pyc', '.pyd']
>>>
नोट हालांकि यह फ़ंक्शन .pyo
के साथ प्रतिस्थापित करेगा यदि पाइथन -O
or -OO
options के साथ लॉन्च किया गया है। इससे बचने के लिए आप कर सकते हैं:
>>> set(importlib.machinery.all_suffixes() +
... importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES +
... importlib.machinery.DEBUG_BYTECODE_SUFFIXES)
{'.pyw', '.py', '.pyd', '.pyc', '.pyo'}
>>>
यह है कि .pyc
और .pyo
दोनों सेट में हैं सुनिश्चित करेगा।
अंत में, आप importlib.machinery.BYTECODE_SUFFIXES
से सावधान रहना चाहिए। जैसा कि @MartijnPieters ने टिप्पणियों में उल्लेख किया है, यह हमेशा OPTIMIZED_BYTECODE_SUFFIXES
या DEBUG_BYTECODE_SUFFIXES
के बराबर होगा। इसका अर्थ यह है कि यदि आप इसे संग्रह में जोड़ते हैं, तो आपको या तो डुप्लीकेट .pyc
या एक डुप्लिकेट .pyo
मान मिलेगा (जब तक कि आप निश्चित रूप से सेट का उपयोग नहीं करते)।
docs से
:
importlib.machinery.BYTECODE_SUFFIXES
बाईटकोड मॉड्यूल के लिए मान्यता प्राप्त फ़ाइल प्रत्यय का प्रतिनिधित्व तार की एक सूची। __debug__
पर आधारित या OPTIMIZED_BYTECODE_SUFFIXES
पर सेट करें या नहीं।
मैं इस हालांकि निरंतर का उपयोग कर, क्योंकि मैं दोनों OPTIMIZED_BYTECODE_SUFFIXES
और संग्रह में DEBUG_BYTECODE_SUFFIXES
चाहते परेशान नहीं किया। तो, इसे जोड़ने का कोई कारण नहीं है।
मैं एक सेट का उपयोग करने के लिए है क्योंकि वे सूचियों की तुलना में एक तेजी से देखने के लिए समय का निर्णय लिया। मतलब, वे मूल्यों के वैश्विक संग्रह के लिए बेहतर अनुकूल हैं जो बदले नहीं जाएंगे और जिनके लिए कोई विशेष आदेश की आवश्यकता नहीं है। इसके अतिरिक्त, वे यह सुनिश्चित करेंगे कि हम आकस्मिक रूप से संग्रह में डुप्लिकेट एक्सटेंशन नहीं जोड़ते हैं।
ध्यान दें कि 'all_suffixes()' में * एक्सटेंशन मॉड्यूल * भी शामिल है; मैक पर यह '[' .py ',' .pyc ',' .cpython-34m.so ',' .abi3.so ',' .so ']' उदाहरण के लिए देता है। –
इसके अलावा, 'importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES' या 'importlib.machinery.DEBUG_BYTECODE_SUFFIXES' संलग्न करें, जो कि * importlib.machinery.BYTECODE_SUFFIXES' के बराबर * नहीं है। अन्यथा '-O' या' -OO' के साथ चलते समय आपके पास '.pyo * * दो बार होगा। –
हां, एक सेट अभी भी बेहतर होगा। ['Importlib.machinery.BYTECODE_SUFFIXES'] देखें (https: // docs.python.org/3/लाइब्रेरी/importlib.html # importlib.machinery.BYTECODE_SUFFIXES') प्रलेखन: * या तो' DEBUG_BYTECODE_SUFFIXES' या 'OPTIMIZED_BYTECODE_SUFFIXES' पर सेट करें इस पर आधारित है कि '__debug__' सत्य है या नहीं। * –