Python üzerinde çalışmaya başlayan insanlar için büyük bir karışıklık ve buradaki cevapları anlamak biraz zor, bu yüzden daha kolay yapacağım.
Python'a betiğimizi çalıştırmasını talimat verdiğimizde, kodumuz gerçekten bozulmaya başlamadan önce Python'un gerçekleştirdiği birkaç adım vardır:
- Bayt koduna derlenir.
- Sonra sanal makineye yönlendirilir.
Bir kaynak kodu yürüttüğümüzde, Python bunu bir bayt kodunda derler. Derleme bir çeviri adımıdır ve bayt kodu, kaynak kodun platformdan bağımsız olarak düşük düzeyli bir temsilidir. Python bayt kodunun ikili makine kodu olmadığını unutmayın (örn. Intel yongası için talimatlar).
Aslında Python, kaynak kodun her bir ifadesini ayrı ayrı adımlara ayırarak bayt kodu talimatlarına çevirir. Bayt kodu çevirisi işlemi hızlandırmak için yapılır. Bayt kodu, orijinal kaynak kodu ifadelerinden çok daha hızlı çalıştırılabilir. Uzantısı vardır .pyc ve makinemize yazabiliyorsa yazılacaktır.
Dolayısıyla, aynı programı bir sonraki çalıştırdığımızda, Python .pyc dosyasını yükleyecek ve değiştirilmedikçe derleme adımını atlayacaktır. Python, ne zaman yeniden derlenmesi gerektiğini bilmek için kaynak ve bayt kodu dosyalarının zaman damgalarını otomatik olarak kontrol eder. Kaynak kodu yeniden kaydedersek, programın bir sonraki çalıştırılışında otomatik olarak bayt kodu yeniden oluşturulur.
Python bayt kodu dosyalarını makinemize yazamazsa, programımız hala çalışır. Bayt kodu bellekte oluşturulur ve program çıkışında atılır. Ancak .pyc dosyaları başlangıç zamanını hızlandırdığından, daha büyük programlar için yazıldığından emin olmak isteyebiliriz.
Perde arkasında neler olduğunu özetleyelim. Bir Python bir programı yürüttüğünde, Python .py'yi belleğe okur ve bir bayt kodu almak için onu ayrıştırır, ardından yürütmeye devam eder. Program tarafından içe aktarılan her modül için, Python önce .pyo veya .pyc dosyasında, .py dosyasına karşılık gelen bir zaman damgasına sahip önceden derlenmiş bir bayt kodu sürümü olup olmadığını kontrol eder. Python varsa bayt kodu sürümünü kullanır. Aksi takdirde, modülün .py dosyasını ayrıştırır, bir .pyc dosyasına kaydeder ve yeni oluşturduğu bayt kodunu kullanır.
Bayt kodu dosyaları da Python kodlarını göndermenin bir yoludur. Python, orijinal .py kaynak dosyaları olmasa bile, bulabildiği her şey are.pyc dosyalarını çalıştırsa bile bir program çalıştıracaktır.
Python Sanal Makinesi (PVM)
Programımız bayt koduna derlendikten sonra, Python Virtual Machine (PVM) 'ye yürütmek üzere gönderilir. PVM ayrı bir program değildir. Kendi başına kurulmasına gerek yoktur. Aslında, PVM sadece bayt kodu talimatımızı kullanarak işlemlerini tek tek yapmak için yinelenen büyük bir döngüdür. PVM, Python'un çalışma zamanı motorudur. Her zaman Python sisteminin bir parçası olarak bulunur. Komut dosyalarımızı gerçekten çalıştıran bileşendir. Teknik olarak Python yorumlayıcısının son adımıdır.