09-06-2015, 04:22 PM
Python programlarını nasıl çalıştıracağımızı bir önceki bölümde anlatmıştık. Gerçekten de Python’da bir programı çalıştırmanın en temel yöntemi bir önceki bölümde anlattığımız gibidir. Ama bunlar Python programlarını çalıştırmanın tek yolu değildir. Python programlarını çalıştırmanın alternatif yöntemleri de bulunur. İşte biz bu bölümde farklı işletim sistemlerine göre bu alternatif yöntemlerden söz edeceğiz.
Dilerseniz önce GNU/Linux ile başlayalım.
GNU/Linux
Elimizde şöyle bir program olduğunu düşünelim:
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Bu programı çalıştırabilmek için, önce programımızı masaüstüne kartvizit.py adı ile kaydediyoruz. Sonra da, daha önce gösterdiğimiz şekilde
komutunu vererek programımızı çalıştırıyoruz.
Daha önce de söylediğimiz gibi, Python programlarını çalıştırmanın temel yöntemidir bu. Bu temel yöntemde, yazdığımız Python programını çalıştırabilmek için Python’ı başlatan komut + program dosyasının adı (
) yapısını kullanıyoruz.
Peki başa
gibi bir komut getirmeden, sadece program adını vererek (yani sadece
komutuyla) programımızı çalıştıramaz mıyız? Elbette çalıştırabiliriz. Ancak bunun için programımız üzerinde bazı değişiklikler yapmamız gerekiyor. Gelin bu değişikliklerin neler olduğuna bakalım.
Programları Sadece İsmi ile Çalıştırmak
Elimizdeki programa tekrar bir bakalım:
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Programımızın adının kartvizit.py olduğunu varsayarsak, bu programı
komutuyla çalıştırabileceğimizi biliyoruz. Ama şimdi biz bu programı komut satırında sadece
komutunu vererek çalıştıracağız.
Dediğimiz gibi, programımızı sadece
gibi bir komutla çalıştırabilmek için programımız üzerinde bazı değişiklikler yapmamız gerekiyor.
Peki nedir bu değişiklikler?
Dedik ki programımızın adı kartvizit.py. Şimdi ilkin programımızın adını kartvizit olarak değiştirelim. Yani uzantısını silelim.
Daha önce de söylediğimiz gibi, GNU/Linux’ta dosyalar üzerinde öntanımlı olarak çalıştırma yetkisine sahip değiliz. Yani o dosya bir program da olsa, bu programı çalıştırabilmemiz için, program dosyasını çalıştırma yetkisine sahip olmamız gerekiyor.
adlı bir sistem komutu yardımıyla gereken bu çalıştırma yetkisini nasıl alabileceğimizi öğrenmiştik:
sudo chmod +x kartvizit
komutunun bir Python komutu olmadığını biliyorsunuz. Bu komut bir sistem komutudur. Dolayısıyla Python’ın etkileşimli kabuğunda değil, işletim sisteminin komut satırında çalıştırılır.
Program dosyasını çalıştırabilmemiz için gereken yetkileri elimize aldık. Ama yapmamız gereken birkaç işlem daha var.
Öncelikle program dosyamızı açarak ilk satıra şu ibareyi ekleyelim:
#!/usr/bin/python3
Yani programımız tam olarak şöyle görünsün:
#!/usr/bin/python3
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Son olarak da programımızı
çıktısında görünen dizinlerden herhangi birinin içine kopyalayalım. Mesela /usr/bin dizini bu iş için en uygun yerdir:
sudo cp kartvizit /usr/bin/kartvizit
Artık komut satırında sadece
komutu vererek programımızı çalıştırabiliriz.
Eğer kullandığımız sistemde root haklarına sahip değilsek, /usr/bin dizinine herhangi bir şey kopyalayamayız. Böyle bir durumda $HOME dizini altında bin adlı bir dizin oluşturup, daha sonra bu dizini YOL’a ekleyebilir, programınızı da bu $HOME/bin dizini içine atabiliriz.
Peki, kodların en başına yerleştirdiğimiz
satırı ne anlama geliyor?
Şöyle düşünün: Bir Python programı yazdınız. Bu programı
gibi bir komut ile çalıştırdığınızda bunun bir Python programı olduğu ve bu programın da Python tarafından çalıştırılacağı anlaşılıyor. Ancak baştaki python3 ifadesini kaldırdığımızda işletim sistemi bu programla ne yapması gerektiğine karar veremez. İşte en başa yerleştirdiğimiz
satırı yazdığımız kodların birer Python kodu olduğunu ve bu kodların da /usr/bin/ dizini altındaki python3 adlı program ile çalıştırılacağını gösteriyor.
GNU/Linux sistemlerinde Python’ın çalıştırılabilir dosyası genellikle /usr/bin dizini altındadır. Dolayısıyla yukarıdaki satırı şöyle yazabiliyoruz:
#!/usr/bin/python3
Böylece işletim sistemimiz Python’ı /usr/bin dizini altında arayacak ve yazdığımız programı Python’la çalıştırması gerektiğini anlayacaktır.
Ancak bazı GNU/Linux sistemlerinde, Python’ın nasıl kurulduğuna bağlı olarak Python’ın çalıştırılabilir dosyası başka bir dizinin içinde de olabilir. Mesela eğer Python programlama dilini yetkisiz kullanıcı olarak ev dizininin altındaki python adlı bir dizin içine kurduysak, çalıştırılabilir dosya $HOME/python/bin/ dizini altında olacaktır. Bu durumda, çalıştırılabilir dosya /usr/bin altında bulunamayacağı için, sistemimiz yazdığımız programı çalıştıramaz.
Python’ın çalıştırılabilir dosyasının her sistemde aynı dizin altında bulunmama ihtimalinden ötürü yukarıdaki gibi sabit bir dizin adı vermek iyi bir fikir olmayabilir. Bu tür sistem farklılıklarına karşı önlem olarak GNU/Linux sistemlerindeki env adlı bir betikten yararlanabiliriz. /usr/bin dizini altında bulunduğunu varsayabileceğimiz bu env betiği, YOL dizinlerini tek tek tarayarak, Python’ın hangi YOL dizini içinde olduğunu bulabilir. Böylece yazdığımız bir programın, Python’ın /usr/bin dizini haricinde bir konuma kurulduğu sistemlerde çalıştırılması konusunda endişe etmemize gerek kalmaz. Bunun için programımızın en başına eklediğimiz satırı şöyle yazıyoruz:
#/usr/bin/env python3
Yani programımız tam olarak şöyle görünüyor:
#!/usr/bin/env python3
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
İlk satırı bu şekilde yazmamız sayesinde Python YOL içinde nereye kurulmuş olursa olsun kolaylıkla tespit edilebilecektir.
Uzun lafın kısası,
yazdığımızda sisteme şu emri vermiş oluyoruz: ‘Python’ı /usr/bin dizini içinde ara!’
yazdığımızda ise şu emri: ‘Python’ı YOL içinde nereye saklandıysa bul!’
Eğer bu satırı
şeklinde yazarsanız ve eğer kullandığımız sistemde Python’ın çalıştırılabilir dosyası /usr/bin/ dizini altında değilse, programınızı çalıştırmak istediğimizde şuna benzer bir hata çıktısı alırız:
bash: deneme: /usr/bin/python3: bad interpreter: No such file or directory
Böyle bir hata almamak için, o satırı
şeklinde yazmaya özen gösteriyoruz. Böylece Python YOL içindeki dizinler arasında nereye kurulmuş olursa olsun işletim sistemimiz Python’ı tespit edebiliyor.
Bu noktada size şöyle bir soru sormama izin verin: Acaba Python’ın python3 adıyla değil de, mesela python34 (veya
) adıyla kurulu olduğu sistemlerde
satırı görevini yerine getirebilir mi?
Elbette getiremez...
Çünkü bu satır yardımıyla biz sistemde python3 adlı bir dosya aratıyoruz aslında. Ama eğer sistemde Python3’ü çalıştıran dosyanın adı ‘python3’ değil de, mesela ‘py3’ ise tabii ki o satır bir işe yaramayacaktır. Programımızın böyle bir sistemde çalışabilmesi için bu satırın
şeklinde yazılması gerekir.
Bu manzara karşısında aklınıza şöyle bir soru gelmiş olabilir:
GNU/Linux’ta sadece Python için değil başka programlama dilleriyle yazılmış programlar için de aynı sorun geçerlidir. Çünkü GNU/Linux dağıtımları arasında bir uyumluluktan bahsetmek mümkün değil. Sistem farklılıklarından ötürü, bir GNU/Linux dağıtımında çalışan bir program başka bir GNU/Linux dağıtımında çalışmayabilir.
GNU/Linux işletim sistemine yönelik programlar yazan bir Python programcısı olarak sizin sorumluluğunuz programınızı yazıp bitirmekten ibarettir. Bu programın herhangi bir GNU/Linux dağıtımında çalışabilmesi o dağıtımın geliştiricilerinin sorumluluğu altındadır. Yani mesela siz kendiniz Ubuntu dağıtımını kullanıyorsanız programlarınızı Ubuntu’yu temel alarak yazarsınız. Burada sizin sorumluluğunuz, yazdığınız programın Ubuntu altında çalışmasını sağlamaktan ibarettir. Aynı programın mesela Pardus altında çalışabilmesi Pardus’a uygun paket yazan geliştiricilerin görevidir. Tabii ki siz isterseniz programınız için hem Ubuntu paketini (DEB), hem de Pardus paketini (PISI) ayrı ayrı hazırlayabilirsiniz. Ama elbette bütün dağıtımlara uygun paketleri tek tek hazırlamanız mümkün değil.
Ayrıca programlarınızın kaynak kodlarını yayımlarken, programın nasıl çalıştırılacağına ilişkin ayrıntılı açıklamaları README yada BENİOKU adlı bir dosya içine yazabilirsiniz. Böylece farklı dağıtımların kullanıcıları, yazdığınız programı kendi dağıtımlarında nasıl çalıştırmaları gerektiği konusunda bir fikir sahibi olabilir. Kullanıcılar, yazdığınız açıklamalardan yola çıkarak programınızı çalıştırabilirse ne âlâ! Ama eğer çalıştıramazsa, bu doğrudan sizin sorununuz değil. Böyle bir durumda zaten GNU/Linux kullanıcıları da sizi suçlamayacak, kendi kullandıkları dağıtımın geliştiricilerinden sizin yazdığınız program için paket isteğinde bulunacaktır.
Programları Çift Tıklayarak Çalıştırmak
GNU/Linux işletim sistemlerinde, özellikle grafik bir arayüze sahip olmayan, yani yalnızca komut satırı üzerinde çalışabilen bir programı başlatmak için program simgesi üzerine çift tıklamak pek uygulanan bir yol değildir. Eğer bir programın grafik arayüzü varsa .desktop dosyaları veya menü girdileri aracılığıyla programa ulaşabilirsiniz. Ama komut satırı üzerinden çalışan uygulamalar genellikle komut satırı üzerinden çalıştırılır. Dolayısıyla elimizde şöyle bir program olduğunu varsayarsak:
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Bu program GNU/Linux üzerinde komut satırı aracılığıyla şu komut verilerek çalıştırılır:
python3 kartvizit.py
Veya eğer isterseniz, daha önce gösterdiğimiz yöntemleri uygulayarak, programı yalnızca ismiyle de çalıştırabilirsiniz.
GNU/Linux dağıtımlarında, yalnızca komut arayüzüne sahip bir programı çift tıklayarak çalıştırmanın önündeki bir başka engel, bütün GNU/Linux dağıtımlarının, simge üzerine çift tıklamaya aynı tepkiyi vermemesidir. Ama teorik olarak, GNU/Linux’ta komut satırı üzerinde çalışabilen bir programın dosyası üzerine çift tıklayarak çalıştırabilmek için şu yolu takip edebilirsiniz:
Öncelikle programımızın ilk satırına, programımızı hangi Python sürümü ile çalıştırmak istediğimizi belirten şu kodu ekliyoruz:
#!/usr/bin/env python3
Daha sonra, program kodlarının en son satırına da şu kodu ekliyoruz:
input()
Eğer bu satırı eklemezseniz, program dosyasına çift tıkladığınızda programınız çok hızlı bir şekilde açılıp kapanır. Bunu engellemek için yukarıda gördüğümüz bu
adlı fonksiyonu kullanıyoruz. Bu fonksiyonu eklememiz sayesinde programımız açıldıktan sonra kapanmayacak, kapanmak için bizim Enter düğmesine basmamızı bekleyecektir.
Bu arada bu
fonksiyonuna şimdilik takılmayın. Birkaç bölüm sonra bu fonksiyonu da bütün ayrıntılarıyla inceleyeceğiz.
Programımızın son hali şöyle:
#!/usr/bin/env python3
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
input()
Bütün bu işlemlerin ardından programımızı çalıştırılabilir olarak işaretliyoruz:
chmod +x kartvizit.py
Artık program dosyası üzerine çift tıklayarak programımızı çalıştırmayı deneyebiliriz. Ama dediğimiz gibi, farklı GNU/Linux dağıtımlarında çift tıklama işlemi farklı yanıtlar verebilir. O yüzden komut satırı uygulamalarını çift tıklayarak başlatmak pek tercih edilen bir yöntem değildir.
GNU/Linux işletim sistemi altında bir Python programını çalıştırmanın alternatif yöntemlerini öğrendiğimize göre, aynı işlemi Windows altında nasıl yapabileceğimizi tartışmaya geçebiliriz. Bu arada siz GNU/Linux kullanıcıları da yukarıda verdiğimiz bilgileri iyice sindirebilmek için kendi kendinize örnek programlar yazıp bunları farklı şekillerde çalıştırmayı deneyebilirsiniz.
Bu arada, her zaman söylediğimiz gibi, yukarıda anlatılanları ezberlemeye çalışmak yerine, neyi neden yaptığımızı anlamaya çalışmak çok daha faydalı bir iş olacaktır. Örneğin bir programı adıyla çağırabilmek için bütün o işlemleri yaparken nereye varmaya çalışıyoruz? Amacımız ne? Her bir adım hangi maksada yönelik? Mesela programımıza neden çalıştırma izni veriyoruz? env betiği ne işe yarar? Programımızın konumunu neden değiştiriyoruz?
Yukarıda anlatılanları okurken kendinize bu tür sorular sorup cevaplamanız, süreci ezberlemek yerine sürecin mantığını kavramanızı sağlayacaktır. Unutmayın, buradaki bilgiler sadece Python programları için geçerli değildir. Burada sözü edilen program çalıştırma mantığı, etrafta gördüğünüz bütün programlar için geçerlidir. Dolayısıyla, eğer buradaki bilgileri hakkıyla öğrenirseniz, bir taşla iki kuş vurmuş olursunuz.
Windows
Bir önceki bölümde, yazdığımız bir Python programını IDLE üzerinden nasıl çalıştırabileceğimizi gördük. Eğer IDLE adlı metin düzenleyiciyi kullanıyorsanız, Python programlarınızı çalıştırmak için muhtemelen çoğunlukla bu yöntemi kullanacaksınız. Ama elbette bir Python programını çalıştırmanın tek yöntemi bu değildir. İşte biz bu bölümde, Windows’ta Python programlarını çalıştırmanın alternatif yöntemlerinden söz edeceğiz.
Programları Komut Satırından Çalıştırmak
Python programlarınızı yazmak için kullandığınız metin düzenleyiciler, tıpkı IDLE’da olduğu gibi, F5 benzeri kısayollar aracılığıyla programlarınızı çalıştırmanızı sağlayabilir. Ama bazı metin düzenleyicilerde bu tür kolaylıklar bulunmaz. Yazdığınız Python programlarını her koşulda çalıştırabilmek için, bu programları komut satırı üzerinden nasıl çalıştıracağınızı da bilmeniz gerekir. Bunun için şu adımları takip ediyoruz.
Öncelikle daha önce öğrendiğimiz yöntemlerden birini kullanarak MS-DOS komut satırına ulaşın.
MS-DOS komut satırına ulaştıktan sonra, daha önce öğrendiğimiz şekilde, komut satırı üzerinden masaüstüne, yani dosyayı kaydettiğiniz yere gelin. (Bu işlemin nasıl yapılacağını hatırladığınızı varsayıyorum.)
Masaüstüne geldikten sonra şu komutu vererek programınızı çalıştırabilirsiniz:
python program_adı.py
Elbette burada Python’ın etkileşimli kabuğuna ulaşmak için hangi komutu kullanıyorsanız onu kullanacaksınız. Ben sizin Python’ın etkileşimli kabuğuna ulaşmak için
komutunu kullandığınızı varsaydım.
Yukarıdaki gibi
komutunu vermek yerine, aynı işlev için önceki derslerde öğrendiğimiz ‘py’ adlı betiği de kullanabilirsiniz:
py program_adı.py
Unutmayın ki ben burada
komutunun Python3’ü başlattığını varsayıyorum. Eğer sisteminizde hem Python2 hem de Python3 kurulu ise
komutunu tek başına kullandığınızda Python2 de başlıyor olabilir.
Dolayısıyla farklı Python sürümlerinin bir arada bulunduğu sistemlerde programınızı Python3 ile çalıştırabilmek için yukarıdaki komutu şu şekilde vermeniz de gerekebilir:
py -3 program_adı.py
py adlı betiği çalıştırırken, istediğiniz Python sürümünün çalışmasını temin etmek için, yukarıda gösterdiğimiz şekilde sürüm numarasını da belirtmenin yanısıra, yazdığınız bir programın istediğiniz Python sürümü ile çalışmasını sağlamanın bir yolu daha var:
Bunun için öncelikle boş bir metin düzenleyici açıp şu kodları yazın:
#! python3
print("Merhaba Zalim Dünya!")
Dosyayı zalim.py adıyla kaydedip şu komutu verin:
py zalim.py
Programınız normal bir şekilde çıktı verir. Şimdi aynı kodları bir de şöyle yazın:
#! python2
print("Merhaba Zalim Dünya!")
Bu defa programınız çalıştırma esnasında hata verecektir. Peki neden?
Yazdığımız programların ilk satırlarına dikkat edin. İlk programda şöyle bir satır yazdık:
#! python3
İşte bu satır, Python programımızı Python’ın 3.x sürümlerinden biri ile çalıştırmamızı sağladı. Python’ın 3.x sürümlerinde öntanımlı karakter kodlama biçimi UTF-8 olduğu için (yani Python3’te Türkçe desteği daha kuvvetli olduğu için) Merhaba Zalim Dünya karakter dizisindeki Türkçe karakterler düzgün bir şekilde gösterilebildi ve programımız düzgün bir şekilde çalıştı.
İkinci programda ise şu şatırı kullandık:
#! python2
Bu satır ise programımızı Python’ın 2.x sürümlerinden biri ile çalıştırmamızı sağlıyor. Python’ın 2.x sürümlerinde öntanımlı karakter kodlama biçimi ASCII olduğundan, Türkçe karakterler içeren bir programı çalıştırabilmek için ilave işlemler yapmamız gerekir. Yukarıdaki program dosyası bu ilave işlemleri içermediği için programımız Python’ın 2.x sürümlerinde hata verecektir.
Bu satırların oluşturduğu etkiyi daha net bir şekilde görebilmek için şu kodları da kullanabilirsiniz:
#! python3
import sys
print(sys.version)
Hatırlarsanız,
fonksiyonunu anlatırken Python’da ‘modül’ diye bir şey olduğundan söz etmiş, örnek olarak da sys adlı modülden bahsetmiştik. Orada bu sys modülü içindeki stdout adlı bir değişkeni incelemiştik. Burada da yine sys modülünü görüyoruz. Bu defa bu modülün içindeki version adlı bir değişkeni kullandık. İsterseniz etkileşimli kabuğu açıp şu komutları vererek kendi kendinize denemeler yapabilirsiniz:
>>> import sys
>>> sys.version
Gördüğünüz gibi bu değişken, kullandığımız Python’ın sürümünü gösteriyor.
Burada ilk satır yardımıyla sys modülünü içe aktardığımızı, ikinci satır yardımıyla da bu modül içindeki version adlı değişkeni kullandığımızı biliyorsunuz. İşte yukarıda gösterdiğimiz program örneğinde de bu sys modülünü ve bunun içindeki version değişkenini kullanıyoruz:
#! python3
import sys
print(sys.version)
Şimdi bu programı kaydedip çalıştırın. Şuna benzer bir çıktı alacaksınız:
'Python 3.4.3 (default, 04.09.2015, 12:24:55)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux'
Gördüğünüz gibi, elde ettiğimiz şey bir karakter dizisi. Bu karakter dizisinin ilk satırlarına bakarak programımızın Python’ın 3.4.3 sürümü ile çalışmış olduğunu anlıyoruz.
Aynı kodları bir de şöyle yazalım:
#! python2
import sys
print(sys.version)
Bu da bize şöyle bir çıktı verecek:
'Python 2.7.10 (default, 04.09.2015, 12:24:55)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2'
Demek ki bu defa programımız Python’ın 2.7.10 sürümü ile çalışmış...
Elbette ben yukarıdaki kodları anlatırken, sisteminizde Python3 ile birlikte Python2’nin de kurulu olduğunu varsaydım. Eğer sisteminizde Python2 kurulu değilse, aldığınız hata mesajının sebebi, doğal olarak, kodlarda Türkçe karakterlerin bulunması değil, Python2’nin kurulu olmaması olacaktır...
Gördüğünüz gibi, programlarımızın ilk satırına eklediğimiz bu kodlar, programlarımızı çalıştırmak istediğimiz sürümleri kontrol etmemizi sağlıyor. Bu satırları kullanarak, programlarımızın istediğimiz Python sürümüyle çalışmasını temin edebiliriz.
Hatırlarsanız buna benzer bir satırın GNU/Linux işletim sistemleri için de geçerli olduğunu söylemiştik. GNU/Linux’ta bu satırı şöyle yazıyorduk:
#!/usr/bin/env python3
Eğer Windows kullanıcıları olarak, Windows’ta yazdığınız programların GNU/Linux dağıtımları altında da çalışmasını istiyorsanız Windows’ta
şeklinde yazdığınız satırı tıpkı GNU/Linux’ta olduğu gibi
şeklinde yazmayı da tercih edebilirsiniz. Çünkü Python Windows’ta yazdığınız satırın sadece python3 kısmıyla ilgilenecek, dolayısıyla
şeklinde yazdığınız kod hem Windows’ta hem de GNU/Linux’ta çalışacaktır.
Programları Sadece İsmi ile Çalıştırmak
Peki yazdığımız programı, başa
gibi bir komut getirmeden çalıştırma imkanımız var mı?
Python Windows’a kurulurken kendini kütüğe (Registry) kaydeder. Dolayısıyla Windows Python programlarını nasıl çalıştırması gerektiğini bilir. Bu sayede Windows üzerinde yazdığımız Python programlarını, programın bulunduğu dizin içinde sadece ismini kullanarak çalıştırmamız da mümkündür. Yani yazdığımız programı masaüstüne kaydettiğimizi varsayarsak, masaüstüne geldikten sonra şu komutu vererek programımızı çalıştırma imkanına sahibiz:
program_adı.py
Tıpkı bir önceki konuda da anlattığımız gibi, programımızı hangi Python sürümünün çalıştıracağını yine program dosyasının ilk satırına yazacağımız
gibi bir kod yardımıyla kontrol edebiliriz.
Burada hemen şöyle bir soru akla geliyor: Windows’ta mesela Notepad ve Calc gibi programları, hiç .EXE uzantısını belirtmeden doğrudan isimleriyle çağırabiliyoruz. Yani örneğin MS-DOS komut satırında
komutu verirsek Notepad programı,
komutu verirsek de Hesap Makinesi programı çalışmaya başlayacaktır. Ama mesela deneme.py adlı programımızı çalıştırabilmek için .PY uzantısını da belirtmemiz gerekti. Peki bu durumun nedeni nedir?
Windows’ta PATHEXT adlı bir çevre değişkeni vardır. Bu değişken, sistemin çalıştırılabilir kabul ettiği uzantıları tutar. MS-DOS ekranında şu komutu verelim:
echo %PATHEXT%
Buradan şu çıktıyı alıyoruz:
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
Windows’ta eğer bir program yukarıda görülen uzantılardan birine sahipse çalıştırılabilir olarak kabul edilecektir. Gördüğünüz gibi, EXE de bu uzantılardan biri. Dolayısıyla bu uzantıya sahip bir dosyayı, uzantısını belirtmeden de çağırabiliyoruz. Eğer isterseniz bu listeye .PY uzantısını da ekleyebilirsiniz. Bunun için şu işlemleri yapabilirsiniz:
Programları Çift Tıklayarak Çalıştırmak
PY uzantılı Python programları üzerine çift tıklanarak da bu programlar çalıştırılabilir. Ama öncelikle şunu söylemeliyiz: Python programları geliştirirken takip etmemiz gereken yöntem, program simgeleri üzerine çift tıklayarak bunları çalıştırmak değil, bu programları komut satırından çalıştırmak olmalıdır. Çünkü programları çift tıklayarak çalıştırdığınızda programların hangi hataları verdiğini göremezsiniz. Program geliştirirken, programınızın verdiği olası hata ve uyarıları görebilmek ve bunları düzeltebilmek için programlarınızı komut satırından çalıştırmalısınız. Dolayısıyla program geliştirirken simge üzerine çift tıklayarak bunları çalıştırmak tamamen anlamsızdır.
Ama yine de en azından bir Python programının üzerine çift tıklanarak nasıl çalıştırılabileceğini öğrenmeniz için biz burada bu konuyu da ele alacağız.
Şimdi elimizde şöyle bir program olsun:
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Kullandığımız işletim sisteminde birden fazla Python sürümü kurulu olabilir. O yüzden, programımızın hangi Python sürümüyle çalışmasını istiyorsak ona uygun şekilde bir ilk satır yazmamız gerekiyor öncelikle. Biz programımızı Python3 ile çalıştırmak istediğimizi varsayalım ve ilk satıra şunu ekleyelim:
#! python3
Böylece Windows, programımızı hangi Python sürümü ile çalıştırması gerektiğini bilecek.
Şimdi program simgesi üzerine iki kez tıklayalım.
Biz bu programın simgesi üzerine çift tıkladığımızda siyah bir komut ekranının çok hızlı bir şekilde açılıp kapandığını görürüz. Aslında programımız çalışıyor, ama programımız yapması gereken işi yaptıktan hemen sonra kapandığı için biz program penceresini görmüyoruz. Programımızın çalıştıktan sonra hemen kapanmamasını sağlayacak bir yol bulmamız gerekiyor. Bunun için dosyamızın en sonuna bir adet
satırı ekleyeceğiz. Yani programımız şöyle görünecek:
#! python3
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
input()
Şimdi programı bu şekilde kaydedip simgesi üzerine çift tıkladığımızda program penceresi açılacak ve biz Enter düğmesine basana kadar da açık kalacaktır. Burada şimdilik
fonksiyonunun ne olduğuna takılmayın. Birkaç bölüm sonra bu fonksiyonu bütün ayrıntılarıyla inceleyeceğiz.
Bu arada, elbette en sona eklediğimiz
satırının görevini yerine getirebilmesi için, ondan önce gelen bütün kodların doğru ve hatasız olması gerekiyor. Eğer bu satırdan önceki kısımda herhangi bir hata yapmışsanız, programın akışı hiçbir zaman
satırına ulaşmayacağı için yine siyah bir komut ekranının hızla yanıp söndüğünü görürsünüz. O yüzden programlarınızı çift tıklayarak çalıştırmadan önce, komut satırında test ederek hatasız olduğundan emin olmalısınız.
Programları .EXE Haline Dönüştürmek
Şimdiye kadar anlattıklarımızdan anlayacağınız gibi, bir Python programını çalıştırabilmek için Python programlama dilinin bilgisayarımızda kurulu olması gerekiyor. Bir program yazdıktan sonra o programı dağıtırken kullanıcılarınızdan Python programlama dilini de kurmalarını isteyebilirsiniz. Ama eğer bilgisayarlarında Python programlama dili kurulu olmayanların da Python ile yazdığınız programları çalıştırabilmelerini istiyorsanız, bu programı çeşitli araçlar yardımıyla bir .EXE dosyası haline getirmeniz de mümkündür. Böylelikle bilgisayarında Python kurulu olmayan kişiler de yazdığınız programı çalıştırma imkanına sahip olabilir.
cx_Freeze
Python3 programlarını .EXE haline dönüştürmek için cx_Freeze adlı bir programdan yararlanacağız.
Bu programı kurmak için şu komutu verin:
pip3 install cx_Freeze
Bu komut başarıyla tamamlandıktan sonra, önceki derslerde öğrendiğimiz şekilde, C:\Python34\Scripts adlı dizini yola (PATH) ekleyin.
Daha sonra işletim sisteminizde bu C:\Python34\Scripts adlı dizinin içine girin. Bu konumdayken bir komut satırı açın ve şu komutu verin:
python3 cxfreeze-postinstall
Tabii ben burada sizin Python’ı çalıştırmak için
komutunu kullandığınızı varsaydım. Eğer Python’ı çalıştırmak için başka bir komut kullanıyorsanız, yukarıda o komutun adını yazmalısınız.
Eğer cx_Freeze programını kuramazsanız http://www.istihza.com/forum adresinden yardım isteyebilirsiniz.
cx_Freeze Nasıl Kullanılır?
cx_Freeze adlı programı indirip kurduktan sonra, kendi yazdığınız Python programının bulunduğu dizin altında şu komutu verin:
cxfreeze kartvizit.py
Bu komutu verdiğinizde dist adlı bir dizinin oluştuğunu göreceksiniz. Şimdi bu dizinin içine girin. İşte orada kartvizit.exe adlı dosya, sizin yazdığınız Python programının .EXE‘ye dönüştürülmüş hali. Programınızı dağıtırken sadece .exe uzantılı dosyayı değil, dist adlı dizini bütün içeriğiyle birlikte dağıtacaksınız.
Dizin adını kendiniz sonradan elle değiştirebileceğiniz gibi, daha .EXE dosyasını oluştururken de değiştirebilirsiniz. Bunun için yukarıdaki komutu şu şekilde verebilirsiniz:
cxfreeze kartvizit.py --install-dir=program_adı
Burada program_adı değerinin yerine, program dizininin adının ne olmasını istiyorsanız onu yazacaksınız.
Cxfreeze oldukça kapsamlı ve ayrıntılı bir programdır. Elbette yazdığınız programlar karmaşıklaştıkça, programınızı .EXE haline getirmek için yukarıdaki gösterdiğimiz
komutunu daha farklı parametrelerle çalıştırmanız gerektiğini göreceksiniz. Biz şimdilik sizi sadece cxfreeze adlı bu programın varlığından haberdar etmekle yetiniyoruz.
kaynak: http://belgeler.istihza.com/py3/alternatif_kaydetme_ve_calistirma.html
Dilerseniz önce GNU/Linux ile başlayalım.
GNU/Linux
Elimizde şöyle bir program olduğunu düşünelim:
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Bu programı çalıştırabilmek için, önce programımızı masaüstüne kartvizit.py adı ile kaydediyoruz. Sonra da, daha önce gösterdiğimiz şekilde
Kod:
python3 kartvizit.py
Daha önce de söylediğimiz gibi, Python programlarını çalıştırmanın temel yöntemidir bu. Bu temel yöntemde, yazdığımız Python programını çalıştırabilmek için Python’ı başlatan komut + program dosyasının adı (
Kod:
python3 kartvizit.py
Peki başa
Kod:
python3
Kod:
kartvizit
Programları Sadece İsmi ile Çalıştırmak
Elimizdeki programa tekrar bir bakalım:
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Programımızın adının kartvizit.py olduğunu varsayarsak, bu programı
Kod:
python3 kartvizit.py
Kod:
kartvizit
Dediğimiz gibi, programımızı sadece
Kod:
kartvizit
Peki nedir bu değişiklikler?
Dedik ki programımızın adı kartvizit.py. Şimdi ilkin programımızın adını kartvizit olarak değiştirelim. Yani uzantısını silelim.
Daha önce de söylediğimiz gibi, GNU/Linux’ta dosyalar üzerinde öntanımlı olarak çalıştırma yetkisine sahip değiliz. Yani o dosya bir program da olsa, bu programı çalıştırabilmemiz için, program dosyasını çalıştırma yetkisine sahip olmamız gerekiyor.
Kod:
chmod
sudo chmod +x kartvizit
Kod:
chmod
Program dosyasını çalıştırabilmemiz için gereken yetkileri elimize aldık. Ama yapmamız gereken birkaç işlem daha var.
Öncelikle program dosyamızı açarak ilk satıra şu ibareyi ekleyelim:
#!/usr/bin/python3
Yani programımız tam olarak şöyle görünsün:
#!/usr/bin/python3
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Son olarak da programımızı
Kod:
echo $PATH
sudo cp kartvizit /usr/bin/kartvizit
Artık komut satırında sadece
Kod:
kartvizit
Eğer kullandığımız sistemde root haklarına sahip değilsek, /usr/bin dizinine herhangi bir şey kopyalayamayız. Böyle bir durumda $HOME dizini altında bin adlı bir dizin oluşturup, daha sonra bu dizini YOL’a ekleyebilir, programınızı da bu $HOME/bin dizini içine atabiliriz.
Peki, kodların en başına yerleştirdiğimiz
Kod:
#!/usr/bin/python3
Şöyle düşünün: Bir Python programı yazdınız. Bu programı
Kod:
python3 kartvizit.py
Kod:
#!/usr/bin/python3
GNU/Linux sistemlerinde Python’ın çalıştırılabilir dosyası genellikle /usr/bin dizini altındadır. Dolayısıyla yukarıdaki satırı şöyle yazabiliyoruz:
#!/usr/bin/python3
Böylece işletim sistemimiz Python’ı /usr/bin dizini altında arayacak ve yazdığımız programı Python’la çalıştırması gerektiğini anlayacaktır.
Ancak bazı GNU/Linux sistemlerinde, Python’ın nasıl kurulduğuna bağlı olarak Python’ın çalıştırılabilir dosyası başka bir dizinin içinde de olabilir. Mesela eğer Python programlama dilini yetkisiz kullanıcı olarak ev dizininin altındaki python adlı bir dizin içine kurduysak, çalıştırılabilir dosya $HOME/python/bin/ dizini altında olacaktır. Bu durumda, çalıştırılabilir dosya /usr/bin altında bulunamayacağı için, sistemimiz yazdığımız programı çalıştıramaz.
Python’ın çalıştırılabilir dosyasının her sistemde aynı dizin altında bulunmama ihtimalinden ötürü yukarıdaki gibi sabit bir dizin adı vermek iyi bir fikir olmayabilir. Bu tür sistem farklılıklarına karşı önlem olarak GNU/Linux sistemlerindeki env adlı bir betikten yararlanabiliriz. /usr/bin dizini altında bulunduğunu varsayabileceğimiz bu env betiği, YOL dizinlerini tek tek tarayarak, Python’ın hangi YOL dizini içinde olduğunu bulabilir. Böylece yazdığımız bir programın, Python’ın /usr/bin dizini haricinde bir konuma kurulduğu sistemlerde çalıştırılması konusunda endişe etmemize gerek kalmaz. Bunun için programımızın en başına eklediğimiz satırı şöyle yazıyoruz:
#/usr/bin/env python3
Yani programımız tam olarak şöyle görünüyor:
#!/usr/bin/env python3
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
İlk satırı bu şekilde yazmamız sayesinde Python YOL içinde nereye kurulmuş olursa olsun kolaylıkla tespit edilebilecektir.
Uzun lafın kısası,
Kod:
#!/usr/bin/python3
Kod:
#!/usr/bin/env python3
Eğer bu satırı
Kod:
#!/usr/bin/python3
bash: deneme: /usr/bin/python3: bad interpreter: No such file or directory
Böyle bir hata almamak için, o satırı
Kod:
#!/usr/bin/env python3
Bu noktada size şöyle bir soru sormama izin verin: Acaba Python’ın python3 adıyla değil de, mesela python34 (veya
Kod:
py3
Kod:
#!/usr/bin/env python3
Elbette getiremez...
Çünkü bu satır yardımıyla biz sistemde python3 adlı bir dosya aratıyoruz aslında. Ama eğer sistemde Python3’ü çalıştıran dosyanın adı ‘python3’ değil de, mesela ‘py3’ ise tabii ki o satır bir işe yaramayacaktır. Programımızın böyle bir sistemde çalışabilmesi için bu satırın
Kod:
#!/usr/bin/env
Kod:
python3.4
Bu manzara karşısında aklınıza şöyle bir soru gelmiş olabilir:
Alıntı:GNU/Linux sistemlerinde Python3’ü çalıştırmanın standart ve tek bir yolu yok. Çünkü Python3’ü çalıştıran dosyanın adı farklı dağıtımlarda farklı ada sahip olabiliyor. Böyle bir durumda ben yazdığım bir Python programının bütün GNU/Linux dağıtımlarında çalışabileceğinden nasıl emin olacağım?Bu sorunun cevabı, ‘Emin olamazsınız,’ olacaktır...
GNU/Linux’ta sadece Python için değil başka programlama dilleriyle yazılmış programlar için de aynı sorun geçerlidir. Çünkü GNU/Linux dağıtımları arasında bir uyumluluktan bahsetmek mümkün değil. Sistem farklılıklarından ötürü, bir GNU/Linux dağıtımında çalışan bir program başka bir GNU/Linux dağıtımında çalışmayabilir.
GNU/Linux işletim sistemine yönelik programlar yazan bir Python programcısı olarak sizin sorumluluğunuz programınızı yazıp bitirmekten ibarettir. Bu programın herhangi bir GNU/Linux dağıtımında çalışabilmesi o dağıtımın geliştiricilerinin sorumluluğu altındadır. Yani mesela siz kendiniz Ubuntu dağıtımını kullanıyorsanız programlarınızı Ubuntu’yu temel alarak yazarsınız. Burada sizin sorumluluğunuz, yazdığınız programın Ubuntu altında çalışmasını sağlamaktan ibarettir. Aynı programın mesela Pardus altında çalışabilmesi Pardus’a uygun paket yazan geliştiricilerin görevidir. Tabii ki siz isterseniz programınız için hem Ubuntu paketini (DEB), hem de Pardus paketini (PISI) ayrı ayrı hazırlayabilirsiniz. Ama elbette bütün dağıtımlara uygun paketleri tek tek hazırlamanız mümkün değil.
Ayrıca programlarınızın kaynak kodlarını yayımlarken, programın nasıl çalıştırılacağına ilişkin ayrıntılı açıklamaları README yada BENİOKU adlı bir dosya içine yazabilirsiniz. Böylece farklı dağıtımların kullanıcıları, yazdığınız programı kendi dağıtımlarında nasıl çalıştırmaları gerektiği konusunda bir fikir sahibi olabilir. Kullanıcılar, yazdığınız açıklamalardan yola çıkarak programınızı çalıştırabilirse ne âlâ! Ama eğer çalıştıramazsa, bu doğrudan sizin sorununuz değil. Böyle bir durumda zaten GNU/Linux kullanıcıları da sizi suçlamayacak, kendi kullandıkları dağıtımın geliştiricilerinden sizin yazdığınız program için paket isteğinde bulunacaktır.
Programları Çift Tıklayarak Çalıştırmak
GNU/Linux işletim sistemlerinde, özellikle grafik bir arayüze sahip olmayan, yani yalnızca komut satırı üzerinde çalışabilen bir programı başlatmak için program simgesi üzerine çift tıklamak pek uygulanan bir yol değildir. Eğer bir programın grafik arayüzü varsa .desktop dosyaları veya menü girdileri aracılığıyla programa ulaşabilirsiniz. Ama komut satırı üzerinden çalışan uygulamalar genellikle komut satırı üzerinden çalıştırılır. Dolayısıyla elimizde şöyle bir program olduğunu varsayarsak:
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Bu program GNU/Linux üzerinde komut satırı aracılığıyla şu komut verilerek çalıştırılır:
python3 kartvizit.py
Veya eğer isterseniz, daha önce gösterdiğimiz yöntemleri uygulayarak, programı yalnızca ismiyle de çalıştırabilirsiniz.
GNU/Linux dağıtımlarında, yalnızca komut arayüzüne sahip bir programı çift tıklayarak çalıştırmanın önündeki bir başka engel, bütün GNU/Linux dağıtımlarının, simge üzerine çift tıklamaya aynı tepkiyi vermemesidir. Ama teorik olarak, GNU/Linux’ta komut satırı üzerinde çalışabilen bir programın dosyası üzerine çift tıklayarak çalıştırabilmek için şu yolu takip edebilirsiniz:
Öncelikle programımızın ilk satırına, programımızı hangi Python sürümü ile çalıştırmak istediğimizi belirten şu kodu ekliyoruz:
#!/usr/bin/env python3
Daha sonra, program kodlarının en son satırına da şu kodu ekliyoruz:
input()
Eğer bu satırı eklemezseniz, program dosyasına çift tıkladığınızda programınız çok hızlı bir şekilde açılıp kapanır. Bunu engellemek için yukarıda gördüğümüz bu
Kod:
input()
Bu arada bu
Kod:
input()
Programımızın son hali şöyle:
#!/usr/bin/env python3
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
input()
Bütün bu işlemlerin ardından programımızı çalıştırılabilir olarak işaretliyoruz:
chmod +x kartvizit.py
Artık program dosyası üzerine çift tıklayarak programımızı çalıştırmayı deneyebiliriz. Ama dediğimiz gibi, farklı GNU/Linux dağıtımlarında çift tıklama işlemi farklı yanıtlar verebilir. O yüzden komut satırı uygulamalarını çift tıklayarak başlatmak pek tercih edilen bir yöntem değildir.
GNU/Linux işletim sistemi altında bir Python programını çalıştırmanın alternatif yöntemlerini öğrendiğimize göre, aynı işlemi Windows altında nasıl yapabileceğimizi tartışmaya geçebiliriz. Bu arada siz GNU/Linux kullanıcıları da yukarıda verdiğimiz bilgileri iyice sindirebilmek için kendi kendinize örnek programlar yazıp bunları farklı şekillerde çalıştırmayı deneyebilirsiniz.
Bu arada, her zaman söylediğimiz gibi, yukarıda anlatılanları ezberlemeye çalışmak yerine, neyi neden yaptığımızı anlamaya çalışmak çok daha faydalı bir iş olacaktır. Örneğin bir programı adıyla çağırabilmek için bütün o işlemleri yaparken nereye varmaya çalışıyoruz? Amacımız ne? Her bir adım hangi maksada yönelik? Mesela programımıza neden çalıştırma izni veriyoruz? env betiği ne işe yarar? Programımızın konumunu neden değiştiriyoruz?
Yukarıda anlatılanları okurken kendinize bu tür sorular sorup cevaplamanız, süreci ezberlemek yerine sürecin mantığını kavramanızı sağlayacaktır. Unutmayın, buradaki bilgiler sadece Python programları için geçerli değildir. Burada sözü edilen program çalıştırma mantığı, etrafta gördüğünüz bütün programlar için geçerlidir. Dolayısıyla, eğer buradaki bilgileri hakkıyla öğrenirseniz, bir taşla iki kuş vurmuş olursunuz.
Windows
Bir önceki bölümde, yazdığımız bir Python programını IDLE üzerinden nasıl çalıştırabileceğimizi gördük. Eğer IDLE adlı metin düzenleyiciyi kullanıyorsanız, Python programlarınızı çalıştırmak için muhtemelen çoğunlukla bu yöntemi kullanacaksınız. Ama elbette bir Python programını çalıştırmanın tek yöntemi bu değildir. İşte biz bu bölümde, Windows’ta Python programlarını çalıştırmanın alternatif yöntemlerinden söz edeceğiz.
Programları Komut Satırından Çalıştırmak
Python programlarınızı yazmak için kullandığınız metin düzenleyiciler, tıpkı IDLE’da olduğu gibi, F5 benzeri kısayollar aracılığıyla programlarınızı çalıştırmanızı sağlayabilir. Ama bazı metin düzenleyicilerde bu tür kolaylıklar bulunmaz. Yazdığınız Python programlarını her koşulda çalıştırabilmek için, bu programları komut satırı üzerinden nasıl çalıştıracağınızı da bilmeniz gerekir. Bunun için şu adımları takip ediyoruz.
Öncelikle daha önce öğrendiğimiz yöntemlerden birini kullanarak MS-DOS komut satırına ulaşın.
MS-DOS komut satırına ulaştıktan sonra, daha önce öğrendiğimiz şekilde, komut satırı üzerinden masaüstüne, yani dosyayı kaydettiğiniz yere gelin. (Bu işlemin nasıl yapılacağını hatırladığınızı varsayıyorum.)
Masaüstüne geldikten sonra şu komutu vererek programınızı çalıştırabilirsiniz:
python program_adı.py
Elbette burada Python’ın etkileşimli kabuğuna ulaşmak için hangi komutu kullanıyorsanız onu kullanacaksınız. Ben sizin Python’ın etkileşimli kabuğuna ulaşmak için
Kod:
python
Yukarıdaki gibi
Kod:
python
py program_adı.py
Unutmayın ki ben burada
Kod:
py
Kod:
py
Dolayısıyla farklı Python sürümlerinin bir arada bulunduğu sistemlerde programınızı Python3 ile çalıştırabilmek için yukarıdaki komutu şu şekilde vermeniz de gerekebilir:
py -3 program_adı.py
py adlı betiği çalıştırırken, istediğiniz Python sürümünün çalışmasını temin etmek için, yukarıda gösterdiğimiz şekilde sürüm numarasını da belirtmenin yanısıra, yazdığınız bir programın istediğiniz Python sürümü ile çalışmasını sağlamanın bir yolu daha var:
Bunun için öncelikle boş bir metin düzenleyici açıp şu kodları yazın:
#! python3
print("Merhaba Zalim Dünya!")
Dosyayı zalim.py adıyla kaydedip şu komutu verin:
py zalim.py
Programınız normal bir şekilde çıktı verir. Şimdi aynı kodları bir de şöyle yazın:
#! python2
print("Merhaba Zalim Dünya!")
Bu defa programınız çalıştırma esnasında hata verecektir. Peki neden?
Yazdığımız programların ilk satırlarına dikkat edin. İlk programda şöyle bir satır yazdık:
#! python3
İşte bu satır, Python programımızı Python’ın 3.x sürümlerinden biri ile çalıştırmamızı sağladı. Python’ın 3.x sürümlerinde öntanımlı karakter kodlama biçimi UTF-8 olduğu için (yani Python3’te Türkçe desteği daha kuvvetli olduğu için) Merhaba Zalim Dünya karakter dizisindeki Türkçe karakterler düzgün bir şekilde gösterilebildi ve programımız düzgün bir şekilde çalıştı.
İkinci programda ise şu şatırı kullandık:
#! python2
Bu satır ise programımızı Python’ın 2.x sürümlerinden biri ile çalıştırmamızı sağlıyor. Python’ın 2.x sürümlerinde öntanımlı karakter kodlama biçimi ASCII olduğundan, Türkçe karakterler içeren bir programı çalıştırabilmek için ilave işlemler yapmamız gerekir. Yukarıdaki program dosyası bu ilave işlemleri içermediği için programımız Python’ın 2.x sürümlerinde hata verecektir.
Bu satırların oluşturduğu etkiyi daha net bir şekilde görebilmek için şu kodları da kullanabilirsiniz:
#! python3
import sys
print(sys.version)
Hatırlarsanız,
Kod:
print()
>>> import sys
>>> sys.version
Gördüğünüz gibi bu değişken, kullandığımız Python’ın sürümünü gösteriyor.
Burada ilk satır yardımıyla sys modülünü içe aktardığımızı, ikinci satır yardımıyla da bu modül içindeki version adlı değişkeni kullandığımızı biliyorsunuz. İşte yukarıda gösterdiğimiz program örneğinde de bu sys modülünü ve bunun içindeki version değişkenini kullanıyoruz:
#! python3
import sys
print(sys.version)
Şimdi bu programı kaydedip çalıştırın. Şuna benzer bir çıktı alacaksınız:
'Python 3.4.3 (default, 04.09.2015, 12:24:55)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux'
Gördüğünüz gibi, elde ettiğimiz şey bir karakter dizisi. Bu karakter dizisinin ilk satırlarına bakarak programımızın Python’ın 3.4.3 sürümü ile çalışmış olduğunu anlıyoruz.
Aynı kodları bir de şöyle yazalım:
#! python2
import sys
print(sys.version)
Bu da bize şöyle bir çıktı verecek:
'Python 2.7.10 (default, 04.09.2015, 12:24:55)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2'
Demek ki bu defa programımız Python’ın 2.7.10 sürümü ile çalışmış...
Elbette ben yukarıdaki kodları anlatırken, sisteminizde Python3 ile birlikte Python2’nin de kurulu olduğunu varsaydım. Eğer sisteminizde Python2 kurulu değilse, aldığınız hata mesajının sebebi, doğal olarak, kodlarda Türkçe karakterlerin bulunması değil, Python2’nin kurulu olmaması olacaktır...
Gördüğünüz gibi, programlarımızın ilk satırına eklediğimiz bu kodlar, programlarımızı çalıştırmak istediğimiz sürümleri kontrol etmemizi sağlıyor. Bu satırları kullanarak, programlarımızın istediğimiz Python sürümüyle çalışmasını temin edebiliriz.
Hatırlarsanız buna benzer bir satırın GNU/Linux işletim sistemleri için de geçerli olduğunu söylemiştik. GNU/Linux’ta bu satırı şöyle yazıyorduk:
#!/usr/bin/env python3
Eğer Windows kullanıcıları olarak, Windows’ta yazdığınız programların GNU/Linux dağıtımları altında da çalışmasını istiyorsanız Windows’ta
Kod:
#! python3
Kod:
#!/usr/bin/env python3
Kod:
#!/usr/bin/env python3
Programları Sadece İsmi ile Çalıştırmak
Peki yazdığımız programı, başa
Kod:
python
Python Windows’a kurulurken kendini kütüğe (Registry) kaydeder. Dolayısıyla Windows Python programlarını nasıl çalıştırması gerektiğini bilir. Bu sayede Windows üzerinde yazdığımız Python programlarını, programın bulunduğu dizin içinde sadece ismini kullanarak çalıştırmamız da mümkündür. Yani yazdığımız programı masaüstüne kaydettiğimizi varsayarsak, masaüstüne geldikten sonra şu komutu vererek programımızı çalıştırma imkanına sahibiz:
program_adı.py
Tıpkı bir önceki konuda da anlattığımız gibi, programımızı hangi Python sürümünün çalıştıracağını yine program dosyasının ilk satırına yazacağımız
Kod:
#! python3
Burada hemen şöyle bir soru akla geliyor: Windows’ta mesela Notepad ve Calc gibi programları, hiç .EXE uzantısını belirtmeden doğrudan isimleriyle çağırabiliyoruz. Yani örneğin MS-DOS komut satırında
Kod:
notepad
Kod:
calc
Windows’ta PATHEXT adlı bir çevre değişkeni vardır. Bu değişken, sistemin çalıştırılabilir kabul ettiği uzantıları tutar. MS-DOS ekranında şu komutu verelim:
echo %PATHEXT%
Buradan şu çıktıyı alıyoruz:
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
Windows’ta eğer bir program yukarıda görülen uzantılardan birine sahipse çalıştırılabilir olarak kabul edilecektir. Gördüğünüz gibi, EXE de bu uzantılardan biri. Dolayısıyla bu uzantıya sahip bir dosyayı, uzantısını belirtmeden de çağırabiliyoruz. Eğer isterseniz bu listeye .PY uzantısını da ekleyebilirsiniz. Bunun için şu işlemleri yapabilirsiniz:
Alıntı:Böylece artık .PY uzantılı dosyaları da, uzantı belirtmeden çalıştırabilirsiniz. Ancak bu komutun işe yarayabilmesi için, MS-DOS’ta o anda programın bulunduğu dizin içinde olmamız gerek. Yani eğer programınız Belgeler dizini içinde ise ve siz de MS-DOSta C:/Users/Kullanici_adi/Desktop dizini altındaysanız bu komut bir işe yaramayacaktır. Eğer yazdığınız programı konum farketmeksizin her yerden çağırabilmek istiyorsanız, programınızın bulunduğu dizini daha önce anlattığımız şekilde YOL’a eklemelisiniz.
- Başlat > Denetim Masası > Sistem ve Güvenlik > Sistem > Gelişmiş Sistem Ayarları yolunu takip edin.
- Açılan pencerede ‘Gelişmiş’ sekmesine tıklayın ve ‘Ortam Değişkenleri’ düğmesine basın.
- ‘Sistem Değişkenleri’ bölümünde PATHEXT öğesini bulup buna çift tıklayın.
- En son girdi olan .WSH‘den sonra ;.PY girdisini ekleyin.
- TAMAM‘a basıp çıkın.
Programları Çift Tıklayarak Çalıştırmak
PY uzantılı Python programları üzerine çift tıklanarak da bu programlar çalıştırılabilir. Ama öncelikle şunu söylemeliyiz: Python programları geliştirirken takip etmemiz gereken yöntem, program simgeleri üzerine çift tıklayarak bunları çalıştırmak değil, bu programları komut satırından çalıştırmak olmalıdır. Çünkü programları çift tıklayarak çalıştırdığınızda programların hangi hataları verdiğini göremezsiniz. Program geliştirirken, programınızın verdiği olası hata ve uyarıları görebilmek ve bunları düzeltebilmek için programlarınızı komut satırından çalıştırmalısınız. Dolayısıyla program geliştirirken simge üzerine çift tıklayarak bunları çalıştırmak tamamen anlamsızdır.
Ama yine de en azından bir Python programının üzerine çift tıklanarak nasıl çalıştırılabileceğini öğrenmeniz için biz burada bu konuyu da ele alacağız.
Şimdi elimizde şöyle bir program olsun:
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
Kullandığımız işletim sisteminde birden fazla Python sürümü kurulu olabilir. O yüzden, programımızın hangi Python sürümüyle çalışmasını istiyorsak ona uygun şekilde bir ilk satır yazmamız gerekiyor öncelikle. Biz programımızı Python3 ile çalıştırmak istediğimizi varsayalım ve ilk satıra şunu ekleyelim:
#! python3
Böylece Windows, programımızı hangi Python sürümü ile çalıştırması gerektiğini bilecek.
Şimdi program simgesi üzerine iki kez tıklayalım.
Biz bu programın simgesi üzerine çift tıkladığımızda siyah bir komut ekranının çok hızlı bir şekilde açılıp kapandığını görürüz. Aslında programımız çalışıyor, ama programımız yapması gereken işi yaptıktan hemen sonra kapandığı için biz program penceresini görmüyoruz. Programımızın çalıştıktan sonra hemen kapanmamasını sağlayacak bir yol bulmamız gerekiyor. Bunun için dosyamızın en sonuna bir adet
Kod:
input()
#! python3
kartvizit = """
İstihza Anonim Şirketi
Fırat Özgül
Tel: 0212 123 23 23
Faks: 0212 123 23 24
e.posta: kistihza@yahoo.com"""
print(kartvizit)
input()
Şimdi programı bu şekilde kaydedip simgesi üzerine çift tıkladığımızda program penceresi açılacak ve biz Enter düğmesine basana kadar da açık kalacaktır. Burada şimdilik
Kod:
input()
Bu arada, elbette en sona eklediğimiz
Kod:
input()
Kod:
input()
Programları .EXE Haline Dönüştürmek
Şimdiye kadar anlattıklarımızdan anlayacağınız gibi, bir Python programını çalıştırabilmek için Python programlama dilinin bilgisayarımızda kurulu olması gerekiyor. Bir program yazdıktan sonra o programı dağıtırken kullanıcılarınızdan Python programlama dilini de kurmalarını isteyebilirsiniz. Ama eğer bilgisayarlarında Python programlama dili kurulu olmayanların da Python ile yazdığınız programları çalıştırabilmelerini istiyorsanız, bu programı çeşitli araçlar yardımıyla bir .EXE dosyası haline getirmeniz de mümkündür. Böylelikle bilgisayarında Python kurulu olmayan kişiler de yazdığınız programı çalıştırma imkanına sahip olabilir.
cx_Freeze
Python3 programlarını .EXE haline dönüştürmek için cx_Freeze adlı bir programdan yararlanacağız.
Bu programı kurmak için şu komutu verin:
pip3 install cx_Freeze
Bu komut başarıyla tamamlandıktan sonra, önceki derslerde öğrendiğimiz şekilde, C:\Python34\Scripts adlı dizini yola (PATH) ekleyin.
Daha sonra işletim sisteminizde bu C:\Python34\Scripts adlı dizinin içine girin. Bu konumdayken bir komut satırı açın ve şu komutu verin:
python3 cxfreeze-postinstall
Tabii ben burada sizin Python’ı çalıştırmak için
Kod:
python3
Eğer cx_Freeze programını kuramazsanız http://www.istihza.com/forum adresinden yardım isteyebilirsiniz.
cx_Freeze Nasıl Kullanılır?
cx_Freeze adlı programı indirip kurduktan sonra, kendi yazdığınız Python programının bulunduğu dizin altında şu komutu verin:
cxfreeze kartvizit.py
Bu komutu verdiğinizde dist adlı bir dizinin oluştuğunu göreceksiniz. Şimdi bu dizinin içine girin. İşte orada kartvizit.exe adlı dosya, sizin yazdığınız Python programının .EXE‘ye dönüştürülmüş hali. Programınızı dağıtırken sadece .exe uzantılı dosyayı değil, dist adlı dizini bütün içeriğiyle birlikte dağıtacaksınız.
Dizin adını kendiniz sonradan elle değiştirebileceğiniz gibi, daha .EXE dosyasını oluştururken de değiştirebilirsiniz. Bunun için yukarıdaki komutu şu şekilde verebilirsiniz:
cxfreeze kartvizit.py --install-dir=program_adı
Burada program_adı değerinin yerine, program dizininin adının ne olmasını istiyorsanız onu yazacaksınız.
Cxfreeze oldukça kapsamlı ve ayrıntılı bir programdır. Elbette yazdığınız programlar karmaşıklaştıkça, programınızı .EXE haline getirmek için yukarıdaki gösterdiğimiz
Kod:
cxfreeze
kaynak: http://belgeler.istihza.com/py3/alternatif_kaydetme_ve_calistirma.html