Bir Python betiğinin çalıştırılması

Şimdiye kadar Python kabuğundaki Python komutları ile vakit geçirdik. Şimdi ise ilk ciddi Python programımızı yazacağız. Başlangıç seviyesindeki her proglamlama kitabı, “Hello World” (Merhaba Dünya) karakter dizisini örnek gösterir.

“python” komutu ile terminalde, Python etkileşimli kabuğunda çalışmaya başlıyoruz. Python3 kabuğuna geçmek için “python3” yazmak gerekebilir:

$ python3
(base) bernd@moon:~$ python
Python 3.7.1 (default, Dec 14 2018, 19:28:38) 
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
In [1]:
print("Hello World!")
Hello World!

Ancak başta da belirttiğimiz gibi, “ciddi” bir program yazmak istiyoruz, yani bir dosyada saklanan bir program istiyoruz. Bu yolla, tekrar tekrar komutları girmeden bir programı kullanabileceğiz. Bazı kimseler bu küçük programı “betik” (script) olarak adlandırmak isteyebilir. “Hello World” benzeri bir program yazacağız. Print fonksiyonumuzu bir dosyaya kaydetmemiz gerekiyor. Programımızı bir dosyada saklamak ve düzenlemek için bir editöre ihtiyacımız olacak. Çok sayıda editör var, ancak sözdizimi vurgulama ve girintileme özelliklerini destekleyen birini tercih etmelisiniz. Linux'da vi, vim, emacs, geany, gedit ve sayısız diğerlerini kullanabilirsiniz. Emacs Windows'da da çalışır, ancak pek çok durumda Notepad++ daha iyi bir seçim olacaktır. Elbette, PyCharm veya Spyder gibi IDE (Entegre Geliştirme Ortamı) de kullanabilirsiniz-

Seçtiğiniz editörü veya IDE’yi bulduktan sonra, küçük programımızı girmeye hazırsınız, örnek:

In [3]:
print("İlk basit Python betiğim!")
İlk basit Python betiğim!

ve dosyayı ilk_basit_programim.py olarak kaydedin. Linux altında .py uzantısı gerekli değildir, ancak kullanmak tavsiye edilir. Modül yazarken ise uzantı kullanımı çok önemlidir.

Bir Python Programını Başlatmak

Diyelim ki betiğimiz monty kullanıcısının ev dizini altındaki bir alt dizinde bulunuyor:


monty@python:~$ cd python
monty@python:~/python$ python ilk_basit_programim.py 
İlk basit Python betiğim!
monty@python:~/python$

Windows'da, betiğimiz Komut İsteminden de çalıştırılabilir (Başlangıç → Bütün Programlar → Donatılar → Komut İstemi). Küçük programımıza “hello.py” adını verdiğimizi ve programımızın isminin ilk_basit_programim.py olmadığına dikkat etmişsinizdir. Command Prompt ### Python’un Dahili Özellikleri Büyük olasılıkla, bir yerlerde Python dilinin bir yorumlanan programlama veya bir betik dili olduğunu okuyacaksınız. Gerçek şudur: Python hem yorumlanan, hem de derlenen bir dildir. Ancak Python’un derlenen bir dil olduğunu söylemek yanlış olacaktır. Bu bölümün sonunda, eğer bu kavramlara yabancı iseniz, derleyiciler ve yorumlayıcılarin tanımlarını bulacaksınız. İnsanlar, derleyicinin Python kodunu makine diline çevirdiğini düşünebilir. Python kodu ara koda çevrilir ve PVM olarak bilinen, Python Sanal Makinesi tarafından çalıştırılır. Java da bu stratejiyi uygular. Python programlarının Java bit kodlarına çevrilip Java Sanal Makinesi (JVM) içinde çalıştırılması için bile bir yol vardır. Bu da Jython ile yapılabilmektedir. Aklımıza şu soru gelebilir, Python betiklerimi daha hızlı olması için derlemeli miyim, ya da bunları derleyebilir miyim? Cevap oldukça basittir: Normalde, hiçbir şey yapmanıza gerek yoktur ve bunun için çaba göstermemeniz gerekir çünkü “Python” düşünme eylemini sizin için yapar, yani gerekli adımları otomatik olarak yürütür. Herhangi bir sebepten ötürü bir python programını el ile derlemek mi istiyorsunuz? Sorun değil. py_compile modülü ile bunu yapabilir, ya yorumlayıcı kabuğu kullanarak,

import py_compile
py_compile.compile('ilk_basit_programim.py')

ya da kabuk istemcisine şu komutu yazarak amacınıza ulaşabilirsiniz:

python -m py_compile ilk_basit_programim.py

Her iki yolla da, aşağıdaki iki konu dikkatinizi çekecek: Birincisi, “pycache” isimli yeni bir alt dizin açılacak (eğer yoksa). Bu alt dizinde “ilk_basit_programim.cpython-34.pyc” isimli bir dosyaya rastlayacaksınız. Bu dosyamızın byte kodundaki derlenmiş sürümüne işaret eder. Aynı zamanda, otomatik olarak bütün Python dosyalarınızı compileall modülü kullanarak derleyebilirsiniz. Kabuk istemcisinde compileall.py dosyasını çalıştırarak ve Python dosyalarının derlenmek için gerek duyacağı dizinin yolunu vererek bunu başarabilirsiniz:

monty@python:~/python$ python -m compileall .
Listing . ...

Ancak söylediğimiz gibi, bunu yapmak zorunda değilsiniz ve Python kodlarını derlemekle vakit harcamanıza gerek yok. Haklı olarak, derleme işlemi kullanıcıdan saklanmıştır. Bazı acemi Python’cular bu hayra alamet olmayan .pyc uzantılı dosyaların nereden geldiğini merak edebilirler. Python’un, ilgili programın bulunduğu dizine yazma izni varsa, .pyc uzantısına sahip bir dosyada derlenmiş bayt kodu saklanacaktır. Python’un yazma izni yoksa da program çalışacaktır. Programdan çıkıldığı zaman byte kodu üretilecek ve fakat saklanmadan atılacaktır.

Bir Python programı çalıştırıldığı zaman, Python önce .pyc uzantısına sahip bir derlenmiş sürüm var mı diye kontrol edecektir. Bu dosyanın .py uzantılı dosyadan daha sonra oluşturulmuş olma zorunluluğu vardır. Böyle bir dosya varsa, Python byte kodunu yükleyecektir ve bu da betiğin çalışmaya hazır hale gelme zamanını kısaltır. Eğer ki hiçbir byte kodu sürümü yoksa, Python programın çalıştırılmasından önce byte kodunu oluşturur. Bir Python programının yürütülmesi, Python Sanal Makinesi (PSM) üzerinde byte kodunun çalıştırılması anlamına gelir.

Source Code to Byte Code

Bir Python betiği her çalıştırıldığında byte kodu üretilir. Bir Python betiği modül olarak içeri aktarılıyorsa (import), byte kodu karşılık gelen .pyc dosyasında saklanır.

Dolayısı ile aşağıdaki işlem bir byte kodu dosyası ortaya çıkartmaz:

monty@python:~/python$ python ilk_basit_programim.py
İlk basit Python betiğim!
monty@python:~/python$

Şu Python2 oturumunda yapılacak içeri aktarma “ilk_basit_programim.pyc” isimli bir byte kodu dosyası üretecektir:

monty@python:~/tmp$ ls 
ilk_basit_programim.py
monty@python:~/tmp$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ilk_basit_betigim
İlk basit Python betiğim!
>>> exit()
monty@python:~/tmp$ ls
ilk_basit_programim.py  ilk_basit_programim.pyc
monty@python:~/tmp$ 

Linux Altında Çalışabilir Betikler

Bu kısım Windows kullanıcıları tarafından gözardı edilebilir, endişe etmeyin, çok önemli değil! Şimdiye kadar, Python betiklerimizi şu komutu vererek, bash komut satırında çalıştırdık:

python3_dosyam.py 
Bir Python betiği Linux'da, örneğin bir Bash betiği gibi çalıştırılabilir. Bu amaçla iki adımın uygulanması gerekir:

1. İlk satır olan konu (shebang) satırına #!/usr/bin/env python3 ifadesi ilave edilmelidir. 
2. Alternatif olarak bu satır #!/usr/bin/python3 de olabilir, Python yorumlayıcınızın yeri böyleyse bu şekilde kullanmalısınız. 
3. İlk konu satırında env kullanmak yerine, yorumlayıcıya arama yaptırılır ve betik çalıştığı zaman yerleştirilir. Böylelikle betik daha taşınabilir olur. 
4. Ancak aynı sorun burada da karşımıza çıkıyor: Env kısmına giden yol her makinede farklı olabiliyor.
5. Dosyanın çalıştırılabilir olması zorunluluğu var: 
6. "chmod +x scriptname" komutu Linux kabuğunda bash gibi çalıştırılmalıdır. "chmod 755 betik_adı" da dosyanızı çalıştırılabilir yapar. Örneğimize dönersek: 

   $ chmod +x ilk_basit_programim.py

Bunu bir bash oturumunda görebiliriz:

bernd@marvin:~$ more ilk_basit_betigim.py 
#!/usr/bin/env python3
print("İlk basit Python betigim!")
bernd@marvin:~$ ls -ltr ilk_basit_betigim.py 
-rw-r--r-- 1 bernd bernd 63 Nov  4 21:17 ilk_basit_betigim.py
bernd@marvin:~$ chmod +x ilk_basit_betigim.py 
bernd@marvin:~$ ls -ltr ilk_basit_betigim.py 
-rwxr-xr-x 1 bernd bernd 63 Nov  4 21:17 ilk_basit_betigim.py
bernd@marvin:~$ ./ilk_basit_betigim.py 
İlk basit Python betiğim!


Derleyiciler ve Yorumlayıcılar Arasındaki Farklar

Derleyici

Tanım: Bir derleyici, kaynak dil olarak tabir ettiğimiz programlama dilinin kaynak kodunu başka bir bilgisayar diline (hedef dil) çeviren (dönüştüren) bir bilgisayar programıdır. Çoğu zaman derleyiciler kaynak kodu çalıştırılabilir programa dönüştürmek için kullanılır, yani bunlar yüksek seviye programlama dilindeki kodu düşük (veya daha da düşük) seviye dillerine, çoğunlukla tümleşke (assembly) veya makine koduna dönüştürür.

Yorumlayıcı

Tanım: Bir yorumlayıcı, bir programlama dilinde yazılmış direktifleri yürüten bilgisayar programıdır. Aşağıdaki iki durumdan birini uygular: • Kaynak kodunu doğrudan çalıştırır, • Kaynak kodunu ilk adımda daha etkili bir duruma çevirdikten sonra bu kodu çalıştırır.