पायथन एक दुभाषिया आधारित भाषा है। हालांकि यह आंतरिक रूप से स्रोत कोड को बाइट कोड में संकलित करता है जब एक स्क्रिप्ट (.py एक्सटेंशन) चलाया जाता है और बाद में बाइटकोड संस्करण स्वचालित रूप से हटा दिया जाता है। जब एक मॉड्यूल (प्रीकंपिल्ड बिल्ट-इन मॉड्यूल के अलावा) को पहली बार आयात किया जाता है, तो इसका संकलित संस्करण भी स्वचालित रूप से बनाया जाता है लेकिन __pycache__ फ़ोल्डर में .pyc एक्सटेंशन के साथ सहेजा जाता है। बाद में उसी मॉड्यूल को आयात करने के लिए कॉल फिर से मॉड्यूल को पुन:संकलित नहीं करेंगे बल्कि पहले से निर्मित मॉड्यूल का उपयोग करेंगे।
हालाँकि, .py एक्सटेंशन वाली एक पायथन स्क्रिप्ट फ़ाइल को बिना चलाए स्पष्ट रूप से संकलित किया जा सकता है। 'py_compile' मॉड्यूल में शामिल हैं 'संकलित करें ()' उस उद्देश्य के लिए कार्य करते हैं। परिणामी .pyc फ़ाइल का नाम पायथन के संस्करण संख्या द्वारा जोड़ा गया है। Python 3.7 के मामले में, नाम में 'cpython-37' प्रत्यय है।
आपको सामान्य रूप से इस मॉड्यूल की आवश्यकता नहीं होगी। हालांकि साझा उपयोग के लिए मॉड्यूल स्थापित करते समय यह उपयोगी हो सकता है, खासकर यदि कुछ उपयोगकर्ताओं को स्रोत कोड वाली निर्देशिका में बाइट-कोड कैश फ़ाइलों को लिखने की अनुमति नहीं है।
मॉड्यूल में एक कमांड लाइन इंटरफ़ेस है। इसे निम्न प्रकार से –m स्विच का उपयोग करके आयात किया जा सकता है
E:\python37>python -m py_compile hello.py
यह 'hello.cpython-37.pyc' फ़ाइल को __pycache__ सबफ़ोल्डर में बनाएगा और संग्रहीत करेगा।
py_compile मॉड्यूल में बाइट-संकलन को कंपाइल () फ़ंक्शन का उपयोग करके प्रोग्रामेटिक रूप से भी किया जा सकता है।
import py_compile py_compile.compile("hello.py")
.pyc एक्सटेंशन वाली बाइटकोड फ़ाइल को .py एक्सटेंशन के साथ सामान्य स्क्रिप्ट की तरह ही कमांड लाइन से सीधे निष्पादित किया जा सकता है।
E:\python37>python __pycache__/hello.cpython-37.pyc
हालांकि, इसे उसी संस्करण के दुभाषिया द्वारा निष्पादित किया जा सकता है जिसके साथ बाइटकोड फ़ाइल संकलित की गई थी। यदि हम इसे पायथन के किसी अन्य संस्करण के साथ चलाने का प्रयास करते हैं तो निम्न त्रुटि प्रदर्शित होगी।
C:\python36>python e:hello.cpython-37.pyc RuntimeError: Bad magic number in .pyc file
py_compile मॉड्यूल में एक और फ़ंक्शन main() है जो कई स्रोत फ़ाइलों को संकलित करता है। तर्क के रूप में नामित फाइलों को संकलित किया जाता है और परिणामी बाइट-कोड को सामान्य तरीके से कैश किया जाता है। यह फ़ंक्शन स्रोत फ़ाइलों का पता लगाने के लिए निर्देशिका संरचना की खोज नहीं करता है; यह केवल स्पष्ट रूप से नामित फ़ाइलों को संकलित करता है।
मॉड्यूल PyCompileError अपवाद को भी परिभाषित करता है जो फ़ाइल को संकलित करने का प्रयास करते समय त्रुटि होने पर उठाया जाता है। (यह तभी उठाया जाएगा जब doraise विकल्प कंपाइल () फ़ंक्शन के लिए True पर सेट हो।
कंपाइल () फ़ंक्शन का ऑप्टिमाइज़ विकल्प ऑप्टिमाइज़ेशन स्तर को नियंत्रित करता है और बिल्ट-इन कंपाइल () फ़ंक्शन को पास किया जाता है। -1 का डिफ़ॉल्ट वर्तमान दुभाषिया के अनुकूलन स्तर का चयन करता है।