পাইথন একটি দোভাষী ভিত্তিক ভাষা। যদিও এটি অভ্যন্তরীণভাবে সোর্স কোডকে বাইট কোডে কম্পাইল করে যখন একটি স্ক্রিপ্ট (.py এক্সটেনশন) চালানো হয় এবং পরে বাইটকোড সংস্করণটি স্বয়ংক্রিয়ভাবে সরানো হয়। যখন একটি মডিউল (প্রি-কম্পাইল করা বিল্ট-ইন মডিউলগুলি ছাড়াও) প্রথম আমদানি করা হয়, তখন এর সংকলিত সংস্করণটিও স্বয়ংক্রিয়ভাবে তৈরি হয় তবে __pycache__ ফোল্ডারে .pyc এক্সটেনশনের সাথে সংরক্ষিত হয়। একই মডিউল আবার আমদানি করার জন্য পরবর্তী কলগুলি মডিউলটিকে পুনরায় কম্পাইল করবে না পরিবর্তে ইতিমধ্যে নির্মিত একটি ব্যবহার করে৷
যাইহোক, .py এক্সটেনশন সহ একটি পাইথন স্ক্রিপ্ট ফাইল এটি চালানো ছাড়াই স্পষ্টভাবে কম্পাইল করা যেতে পারে। 'py_compile'৷ মডিউলে রয়েছে 'কম্পাইল()' যে উদ্দেশ্যে ফাংশন। পাইথনের সংস্করণ নম্বর দ্বারা ফলাফল .pyc ফাইলের নাম যুক্ত করা হয়েছে। Python 3.7 এর ক্ষেত্রে, নামের সাথে 'cpython-37' প্রত্যয় আছে।
আপনি সাধারণত এই মডিউল প্রয়োজন হবে না. তবে শেয়ার্ড ব্যবহারের জন্য মডিউল ইনস্টল করার সময় এটি কার্যকর হতে পারে, বিশেষ করে যদি কিছু ব্যবহারকারীর কাছে সোর্স কোড ধারণকারী ডিরেক্টরিতে বাইট-কোড ক্যাশে ফাইলগুলি লেখার অনুমতি না থাকে৷
মডিউলটির একটি কমান্ড লাইন ইন্টারফেস রয়েছে। এটি নিম্নরূপ –m সুইচ ব্যবহার করে আমদানি করা যেতে পারে
E:\python37>python -m py_compile hello.py
এটি __pycache__ সাবফোল্ডারে 'hello.cpython-37.pyc' ফাইল তৈরি ও সংরক্ষণ করবে।
py_compile মডিউলে 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 ব্যতিক্রমকেও সংজ্ঞায়িত করে যা ফাইলটি কম্পাইল করার চেষ্টা করার সময় একটি ত্রুটি ঘটলে উত্থাপিত হয়। কম্পাইল() ফাংশনের জন্য ডোরাইজ বিকল্পটি সত্যে সেট করা থাকলেই এটি উত্থাপিত হবে।
compile() ফাংশনের অপ্টিমাইজ অপশন অপ্টিমাইজেশন লেভেল নিয়ন্ত্রণ করে এবং বিল্ট-ইন compile() ফাংশনে পাস করা হয়। -1-এর ডিফল্ট বর্তমান দোভাষীর অপ্টিমাইজেশান স্তর নির্বাচন করে৷