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.
print("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:
print("İ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.

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.
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.pyBir 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.