2. Çalışma ortamının kurulumu
2.1. Python 3.8.1
Bu belgedeki örnekler, Windows 10 işletim sistemli bir bilgisayarda URL |https://www.python.org/downloads/| (Şubat 2020) adresinden edinilebilen Python 3.8.1 yorumlayıcısıyla test edilmiştir:

Python kurulumu, [1] dosya dizinini ve programlar listesinde [2] menüsünü oluşturur:

- [3-4]: iki etkileşimli Python yorumlayıcısı;
- [5]: Python belgeleri;
- [6]: Python modülleri belgeleri;
Etkileşimli Python yorumlayıcısını kullanmayacağız. Sadece bu belgedeki komut dosyalarının bu yorumlayıcıyla çalıştırılabileceğini bilmeniz yeterlidir. Bir Python işlevinin çalışmasını test etmek için kullanışlı olsa da, yeniden kullanılacak komut dosyaları için pek kullanışlı değildir. İşte yukarıdaki [4] seçeneğiyle ilgili bir örnek:

>>> komut istemi, girilen Python komutunun anında çalıştırılmasını sağlar. Yukarıda yazılan kodun anlamı şöyledir:
Satırlar:
- 1: bir değişkenin başlatılması. Python'da değişkenlerin türü belirtilmez. Değişkenler, kendilerine atanan değerin türünü otomatik olarak alır. Bu tür zaman içinde değişebilir;
- 2: adın görüntülenmesi. 'nom=%s', %s'nin bir karakter dizisini belirten biçimsel bir parametre olduğu bir görüntüleme biçimidir. nom, %s yerine görüntülenecek olan gerçek parametredir;
- 3: Görüntüleme sonucu;
- 4: nom değişkeninin türünün gösterimi;
- 5: nom değişkeni burada class türündedir. Python 2.7'de değeri <type 'str'> olurdu;
Şimdi bir Windows konsolu açalım:

[python] yerine [1] yazabilmemiz ve [python.exe] yürütülebilir dosyasının bulunabilmesi, bu dosyanın Windows makinesindeki PATH dizininde olduğunu gösterir. Bu önemlidir, çünkü Python geliştirme araçlarının Python yorumlayıcısını bulabileceği anlamına gelir. Bunu şu şekilde doğrulayabiliriz:

- [2]'te Python yorumlayıcısından çıkılır;
- [3]'te, Windows makinesindeki yürütülebilir dosyaların PATH değerini gösteren komut;
- [4]'te, Python 3.8 yorumlayıcısının klasörünün PATH'in bir parçası olduğu görülür;
2.2. IDE PyCharm Topluluğu
2.2.1. Giriş
Bu belgedeki komut dosyalarını derlemek ve çalıştırmak için, URL |https://www.jetbrains.com/fr-fr/pycharm/download/#section=windows| adresinde (Şubat 2020 itibarıyla) bulunan [PyCharm] Community sürümü düzenleyicisini kullandık:

IDE, PyCharm ve [1-3] Community sürümlerini indirin ve kurun.
IDE PyCharm'i çalıştıralım ve ilk Python projemizi oluşturalım:


- [2-4]'te yeni bir proje oluşturun;
IDE PyCharm, oluşturulan projeyi şu şekilde gösterir:

- [2-3]'te, IDE'in özelliklerini inceleyelim;

- [4]'te, proje için kullanılacak Python yorumlayıcısı;
- [5]'te, kullanılabilir yorumlayıcıların açılır listesi;
- [6]'te, |Python 3.8.1| paragrafında indirilen yorumlayıcı seçilir;

- [7]'te, seçilen yorumlayıcı;
- [8]'te, bu yorumlayıcıyla kullanılabilen paketlerin listesi yer alır. Paketler, Python betiklerinin kullanabileceği modülleri içerir. Yüzlerce modül mevcuttur;
Öncelikle, ilk Python betiğimizi yerleştireceğimiz bir klasör oluşturalım:

- projeye sağ tıklayın, ardından [1-2]'e tıklayarak bir klasör oluşturun;
- [3]'e klasör adını yazın: bu klasör, proje klasörü içinde oluşturulacaktır;
Ardından bir Python betiği oluşturalım:

- [bases] klasörüne sağ tıklayın, ardından [1-3]'i seçin;
- [4-5]'te komut dosyasının adını belirtin;
İlk komut dosyamızı yazalım:

-
[3] dosyasına aşağıdaki komut dosyasını yazalım:
-
- ve 3. satırlar: yorumlar # işaretiyle başlar;
-
- satır: bir değişkenin başlatılması. Python, değişkenlerinin türünü belirtmez;
-
- satır: ekrana çıktı. Burada kullanılan sözdizimi [format % données]'tir ve şu biçimdedir:
- biçim: isim=%s; burada %s, bir karakter dizisinin yerini belirtir. Bu karakter dizisi, ifadenin [données] kısmında bulunur;
- veriler: [nom] değişkeninin değeri, biçim dizesindeki %s biçimini değiştirecektir;
- [4-5] ile, Python'u yöneten kuruluşun önerilerine göre kodu yeniden biçimlendiriyoruz;
-
Komut dosyası, [6] koduna sağ tıklanarak çalıştırılır:

- [7], yürütülen komut;
- [8], yürütme sonucu;
Belgedeki komut dosyasını çalıştırmak için, kodu URL |https://tahe.developpez.com/tutoriels-cours/python-flask-2020/documents/python-flask-2020.rar| adresinden indirin ve ardından PyCharm adresinde aşağıdaki adımları izleyin:

- [1-2]'te, mevcut bir projeyi açın: indirilen kodun bulunduğu klasörü seçin;
- [3]'te, açılan proje;
- [4-5]'te, projedeki komut dosyalarından birini çalıştırın;

- [7-8]'te, çalıştırma sonuçları;
2.2.2. Sanal Çalışma Ortamı
Çalışma ortamımız artık kullanıma hazırdır. Ancak bu dersin komut dosyalarını yazmak için ortamı biraz değiştireceğiz. Öncelikle, Pycharm'ın yapılandırmasını değiştirelim:

Sağdaki pencerede:
- varsayılan olarak, [1] kutucuğu işaretlidir. Pycharm'ın varsayılan olarak en son açılan projeyi açmaması, bunun yerine açılacak projeyi bizim seçmemize izin vermesi için bu kutucuğun işaretini kaldırıyoruz;
- [2] seçeneğinde, uygulama penceresini kapattığımızda Pycharm'dan çıkmayı onaylamıyoruz;
- [3] seçeneğinde, yeni projeler başka bir pencerede açılır;
- [4]'te, Pycharm kapatıldığında ve bir program çalışıyorsa, bu program durdurulur;
Şimdi PyCharm'ı kapatıp yeniden açalım:

- [1]'te yeni bir proje oluşturulur;
- [2]'te, projenin klasörünü belirtin;
- [3]'te bir sanal ortam seçin. Sanal ortam, oluşturduğunuz projeye özeldir. Diğer projelerin sanal ortamlarıyla karışmaz. Bir Python / Flask projesi, kurulması gereken birçok harici kütüphane kullanır. P1 adlı bir proje, B kütüphanesinin v1 sürümünü kullanabilirken, P2 adlı bir proje aynı B kütüphanesini v2 sürümünde kullanabilir. Bu iki sürüm birbiriyle az ya da çok uyumlu olabilir. Ancak bir kütüphane v2 sürümünde kurulduğunda ve v1 sürümü zaten kurulu ise, v1 sürümü v2 sürümü tarafından üzerine yazılır. Yeni v2 sürümü v1 sürümüyle tamamen uyumlu değilse, bu durum v1 sürümünü kullanan proje için sorun yaratabilir. Bu sorunları önlemek için her projeyi bir sanal ortamda izole ederiz;
- [4]'te, proje sırasında indirilecek Python kütüphanelerinin depolanacağı klasörü belirleyin. Burada, proje klasörünün içindeki [venv] (sanal ortam) klasörünü seçtik. Bunu yapmak zorunlu değildir;
- [5], projenin Python yorumlayıcısı. Bu, bir önceki adımda kurduğumuz yorumlayıcıdır;
- [6] komutuyla projeyi oluşturun;

- [7-8]'te, oluşturulan proje;
- [9]'te, projenin yürütme ortamı, yani sanal ortam;
- [10]'te, [site-packages] klasörü, daha sonra indirilecek kütüphanelerin saklanacağı klasördür;
2.2.3. Git
Ardından, bir kaynak kodu kontrol yazılımı etkinleştirilir. Burada bu, Git [1-4] olacaktır:

Bir kaynak kodu kontrol yazılımı (VCS: Version Control System), bir projenin gelişimini takip etmemizi sağlar. "Commit" adı verilen bir işlemle, projenin yaşam döngüsünün farklı anlarında anlık görüntüleri alınabilir. T ve T+1 zamanlarında iki commit yapılırsa, VCS, commit edilen iki sürüm arasında nelerin değiştiğini belirlemeye olanak tanır. Normalde VCS, bir geliştirici ekibi tarafından kullanılır. Geliştiriciler, kodları gerektiği gibi test edildikten sonra commit yaparlar. Diğer geliştiriciler, VCS aracılığıyla bu onaylanmış kodu alıp kullanabilirler.
Burada tek bir geliştirici var. Deneyimler, bir uygulamanın T zamanında çalışırken T+1 zamanında çalışmayabileceğini göstermektedir. Bu durumda, T zamanına geri dönüp sıfırdan başlamak isteriz. VCS bunu mümkün kılar ve bu nedenle burada onu kullanacağız.
Git ile nasıl ilerleneceğini göstereceğiz.

- [1]'te, [Git] sekmesini (sol altta) seçin;
- [2]'te, projenin 495 dosyasının Git tarafından sürümlenmediğini görüyoruz. Bu, commit sırasında bu dosyaların projeye dahil edilmeyeceği anlamına gelir;
- [3]'te, [commit] düğmesi veya proje onay düğmesi bulunur. Daha önce de belirtildiği gibi, Git bu noktada projenin bir anlık görüntüsünü alır ve bunu projenin kök dizininde bulunan [.git] klasörüne kaydeder (Pycharm tarafından gösterilmez ancak Windows Dosya Gezgini'nde görülebilir);
Projeyi mevcut haliyle [3] olarak onaylayalım.
- [4]'te, sürümlenmemiş dosyaların listesi;
- [5]'te, bu sürümlenmemiş dosyaların tamamı [venv] sanal ortamına aittir;
- [6]'te, her commit'in bir mesajla birlikte olması gerekir. Geliştirici, burada commit edilecek sürümün, en son commit edilen sürüme kıyasla getirdiği değişiklikleri belirtir;
Bazı klasörler veya dosyalar Git tarafından göz ardı edilebilir. Bu durumda, bunlar hiçbir zaman Git anlık görüntüsünün bir parçası olmaz. Yukarıdaki [5]'te, [venv] klasörüne sağ tıklayalım.
- [1-3]'te, [venv] klasörünün Git'in anlık görüntülerine dahil edilmemesi gerektiği belirtilir. Git tarafından göz ardı edilen klasör ve dosyaların listesi, [.gitignore] [4] adlı bir dosyaya kaydedilir;


- önceki işlemden sonra, [venv] klasöründeki tüm dosyalar, sürümlenmemiş dosyalar listesinden kaybolur. Geriye sadece az önce oluşturulan [.gitignore] dosyası kalır;
- [5] dosyasını seçip kaydediyoruz;
- [6]'te bir commit mesajı oluşturuyoruz:
- [7]'te, onaylıyoruz. Ardından projenin fotoğrafı çekilir;

- [8-9]'te, [.gitignore] dosyasının içeriği: [/venv] klasörünün adını içeren tek bir satır; bu, fotoğraflar çekilirken içeriğinin göz ardı edilmesi gerektiğini belirtir;
Şimdi Git'in bize nasıl yardımcı olabileceğini görelim. Öncelikle, [git] adlı bir klasör oluşturuyoruz (başka herhangi bir ad da kullanabilirsiniz – bu klasör, gösterimin sonunda silinebilir):

- [1-5] içinde, [git] adlı bir klasör oluşturulur;

- [6-10] dosyasında, [git_01] adlı bir Python betiği oluşturulur;

- [11-12]'te, betik yalnızca bir yorum içerir;
- [13-14] dosyasında, [git_01] dosyasının bir kopyası oluşturulur. Bunun için [git_01]'i seçin ve Ctrl-C (Kopyala) tuşlarına basın, ardından (Ctrl-V) (Yapıştır) tuşlarına basın ve dosya adı olarak [git_02]'i belirtin;

Şimdi projemizi commit edelim. [git_01, git_02] adlı iki dosya ile bir fotoğraf çekilecek;

- [1-3] olarak, projeyi commit edelim;
- [4] dosyasına dönüştürüldü; commit etmek istediğimiz sürümlenmemiş dosyaları seçelim, burada hepsini seçiyoruz;
- [5] dosyasında, commit'i tanımlayan mesajı girin;
- [6]'te, onaylanır;

- [1-2]'te, commit'i onaylayın;
- [3]'te, [Log] sekmesini seçin;
- [4]'te, projenin dallarının bir görünümü. Burada, [master] adlı tek bir dal var;
- [5-6]'te, az önce gerçekleştirilen commit;
Şimdi aynı şekilde [git_03] adlı bir komut dosyası oluşturalım:

[git_02] komut dosyasını değiştirelim ve [git_01] komut dosyasını silelim:

Ardından yeni sürümü commit edelim:

Artık günlüklerde iki commit var:

Belirli bir commit'i seçtiğimizde, sağ tarafında projenin dosya ağacı görünür:

Şimdi, son commit'in bizi bir çıkmaza sürüklediğini ve önceki commit'lerden birine karşılık gelen duruma geri dönmek istediğimizi varsayalım:

- [1-2]'e, geri dönmek istediğimiz durumdaki commit'i seçiyoruz;
- [3-5]'te, çeşitli sıfırlama modları mevcuttur. O andan itibaren yapılan değişiklikleri kaybederek seçilen duruma geri dönen [hard] modunu seçiyoruz;

- [6]'te, silinmiş olan [git_01] geri yüklendi;
- [7-8]'e dönüştürdüğümüzde, [git_02]'i yapılan değişiklik olmadan orijinal durumunda buluyoruz;
Şimdi, [git_02]'i değiştirip [git_03] ve [1-4]'i ekleyelim:

Şimdi, ilk commit’e geri dönme işlemini tekrar yapalım:

- ile [1-4]'e geri döndüğümüzde, 1 numaralı commit'teki fotoğrafa geri dönmüş oluruz;
- [5-6]'te, [Hard] yerine [Keep] seçeneği kullanılır. Bu seçenekleri anlamak kolay değildir. Bu nedenle bunları denemek gerekir:
![]() | ![]() |
- [1]'te, [git_03] dosyası hala oradadır;
- [2-3]'te, [git_02] dosyası değişikliklerini korumuştur;
[Revert Commit]'in ne yaptığını söylemek zor. Şimdi mevcut durumu commit edelim:

- [1-6]'te, commit;

- [9]'te yeni commit'i görüyoruz;
Şimdi, daha önce yapıldığı gibi 1 numaralı commit'e geri dönmeye çalışalım:
![]() | ![]() |
- [1-6]'te, [Hard] modunda 1 numaralı commit'e geri dönüyoruz;

- [7-8]'e geldiğimizde, bu sefer 1 numaralı commit'ten bu yana yapılan tüm değişiklikler kaybolmuştur;
Bundan sonra, [Git]'e bir daha dönmeyeceğiz. Okuyucu şu şekilde çalışabilir:
- verilen örnekleri ya kendisi yazarak ya da dersin web sitesinden indirerek takip edebilir;
- bir örnek çalıştığında, projesini commit edebilir;
- kendi kodlarını geliştirirken bir çıkmaza girdiğinde, önceki bir commit'e geri dönerek istikrarlı bir duruma geri dönebileceğini bilir;
2.3. Python Kod Yazım Kuralları
Python kodunu yazım kurallarına uymadan yazabilirsiniz ve bu, kodun çalışmasını engellemez. Ancak, yazım kuralları belirlemiş olan Python topluluğu tarafından hoş karşılanmayabilir. Bu kurallar, |https://stackoverflow.com/questions/159720/what-is-the-naming-convention-in-python-for-variable-and-function-names| adresindeki bir yazıda özetlenmiştir:

- Bir modülün adı (module_name), bazen [snake_case] olarak adlandırılan bir kurala uyar: tamamen küçük harflerden oluşur ve kelimeler alt çizgi karakteriyle ayrılabilir. Bu [snake_case] kuralı, yöntem, paket, değişken ve işlev adları için geçerlidir;
- bir sınıfın adı (ClassName), bazen [PascalCase] olarak adlandırılan bir kurala uyar: kelimeler birbirine yapıştırılmış ve her kelimenin ilk harfi büyük harfle yazılır;
- sabitlerin adları [SNAKE_CASE] kuralına uyar: alt çizgi karakteriyle ayrılmış, tümü büyük harflerden oluşan kelime dizisi;
Bu kurallara bu belgede genel olarak uyulmuştur. Bununla birlikte, bir sınıf tanımlayan modüller için, modüle içerdiği sınıfla aynı adı verdim. Dolayısıyla, [snake_case] yerine [PascalCase] kuralını takip eder. Sınıf modüllerini hızlıca tespit edebilmek istedim.



