{"id":32680,"date":"2025-10-24T18:42:02","date_gmt":"2025-10-24T15:42:02","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32680"},"modified":"2025-10-24T18:42:02","modified_gmt":"2025-10-24T15:42:02","slug":"python-3te-modul-yazimi-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/","title":{"rendered":"Python 3&#8217;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Python 3&#8217;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber<\/h2>\n<p>Python, okunabilirli\u011fi ve sadeli\u011fi ile bilinen pop\u00fcler bir programlama dilidir. B\u00fcy\u00fck ve karma\u015f\u0131k uygulamalar geli\u015ftirirken, kodunuzu d\u00fczenli, y\u00f6netilebilir ve yeniden kullan\u0131labilir k\u0131lmak hayati \u00f6nem ta\u015f\u0131r. \u0130\u015fte tam bu noktada Python mod\u00fclleri devreye girer. Mod\u00fcller, kodunuzu mant\u0131ksal birimlere ay\u0131rman\u0131za, i\u015flevselli\u011fi gruplaman\u0131za ve ayn\u0131 kodu tekrar tekrar yazma ihtiyac\u0131n\u0131 ortadan kald\u0131rman\u0131za olanak tan\u0131r. Bu kapsaml\u0131 rehberde, Python 3&#8217;te mod\u00fcl yaz\u0131m\u0131n\u0131n temellerinden ileri d\u00fczey konular\u0131na kadar her \u015feyi detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>Mod\u00fcl Nedir ve Neden Kullanmal\u0131y\u0131z?<\/h3>\n<p>En basit tan\u0131m\u0131yla, bir Python mod\u00fcl\u00fc, Python tan\u0131mlamalar\u0131n\u0131 ve ifadelerini i\u00e7eren bir dosyad\u0131r. Bir mod\u00fcl, fonksiyonlar, s\u0131n\u0131flar ve de\u011fi\u015fkenler i\u00e7erebilir. Dosya ad\u0131, mod\u00fcl\u00fcn ad\u0131 art\u0131 <code>.py<\/code> uzant\u0131s\u0131d\u0131r. \u00d6rne\u011fin, <code>my_module.py<\/code> ad\u0131nda bir dosya, <code>my_module<\/code> ad\u0131nda bir mod\u00fcl tan\u0131mlar.<\/p>\n<p>Mod\u00fcl kullanman\u0131n bir\u00e7ok avantaj\u0131 vard\u0131r:<\/p>\n<ul>\n<li><strong>Yeniden Kullan\u0131labilirlik (Reusability):<\/strong> Bir kez yazd\u0131\u011f\u0131n\u0131z kodu birden fazla projede veya uygulaman\u0131n farkl\u0131 b\u00f6l\u00fcmlerinde kullanabilirsiniz. Bu, geli\u015ftirme s\u00fcresini k\u0131salt\u0131r ve kod tekrar\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>Organize Etme (Organization):<\/strong> Kodunuzu mant\u0131ksal olarak ilgili par\u00e7alara ay\u0131rarak daha d\u00fczenli ve anla\u015f\u0131l\u0131r hale getirirsiniz. Bu, \u00f6zellikle b\u00fcy\u00fck projelerde kod taban\u0131n\u0131 y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Ad Alanlar\u0131 (Namespaces):<\/strong> Her mod\u00fcl\u00fcn kendi ad alan\u0131 vard\u0131r. Bu, farkl\u0131 mod\u00fcllerde ayn\u0131 ada sahip de\u011fi\u015fkenlerin veya fonksiyonlar\u0131n \u00e7ak\u0131\u015fmas\u0131n\u0131 \u00f6nler ve kodun okunabilirli\u011fini art\u0131r\u0131r.<\/li>\n<li><strong>Bak\u0131m ve Hata Ay\u0131klama (Maintenance and Debugging):<\/strong> Kodunuzu mod\u00fcllere ay\u0131rmak, hatalar\u0131 bulmay\u0131 ve d\u00fczeltmeyi kolayla\u015ft\u0131r\u0131r. Bir sorun belirli bir mod\u00fclde oldu\u011funda, sadece o mod\u00fcle odaklanabilirsiniz.<\/li>\n<li><strong>\u0130\u015f Birli\u011fi (Collaboration):<\/strong> Birden fazla geli\u015ftirici farkl\u0131 mod\u00fcller \u00fczerinde e\u015f zamanl\u0131 olarak \u00e7al\u0131\u015fabilir, bu da tak\u0131m projelerinde verimlili\u011fi art\u0131r\u0131r.<\/li>\n<\/ul>\n<h3>Temel Mod\u00fcl Kavramlar\u0131<\/h3>\n<p>Mod\u00fcllerin ne oldu\u011funu anlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi onlar\u0131 nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 ve kullanaca\u011f\u0131m\u0131z\u0131 inceleyelim.<\/p>\n<h4>Basit Bir Mod\u00fcl Olu\u015fturma<\/h4>\n<p>Bir mod\u00fcl olu\u015fturmak olduk\u00e7a basittir. Tek yapman\u0131z gereken, Python kodunuzu bir <code>.py<\/code> dosyas\u0131na kaydetmektir. A\u015fa\u011f\u0131da, temel matematiksel i\u015flemleri i\u00e7eren basit bir mod\u00fcl \u00f6rne\u011fi bulunmaktad\u0131r. Bu dosyay\u0131 <code>matematik_islemleri.py<\/code> olarak kaydedelim:<\/p>\n<pre><code class=\"language-python\"># matematik_islemleri.py\n\nPI = 3.14159\n\ndef topla(a, b):\n    \"\"\"\u0130ki say\u0131y\u0131 toplar.\"\"\"\n    return a + b\n\ndef cikar(a, b):\n    \"\"\"Bir say\u0131dan di\u011ferini \u00e7\u0131kar\u0131r.\"\"\"\n    return a - b\n\ndef carp(a, b):\n    \"\"\"\u0130ki say\u0131y\u0131 \u00e7arpar.\"\"\"\n    return a * b\n\ndef bol(a, b):\n    \"\"\"Bir say\u0131y\u0131 di\u011ferine b\u00f6ler. S\u0131f\u0131ra b\u00f6lme hatas\u0131n\u0131 kontrol eder.\"\"\"\n    if b == 0:\n        raise ValueError(\"S\u0131f\u0131ra b\u00f6lme yap\u0131lamaz!\")\n    return a \/ b\n\nclass Hesaplayici:\n    \"\"\"Temel matematik i\u015flemleri i\u00e7in bir s\u0131n\u0131f.\"\"\"\n    def __init__(self, baslangic_degeri=0):\n        self.deger = baslangic_degeri\n\n    def ekle(self, sayi):\n        self.deger += sayi\n        return self.deger\n\n    def mevcut_deger(self):\n        return self.deger\n<\/code><\/pre>\n<p>Bu dosya art\u0131k bir mod\u00fcld\u00fcr ve i\u00e7inde <code>topla<\/code>, <code>cikar<\/code>, <code>carp<\/code>, <code>bol<\/code> fonksiyonlar\u0131, <code>PI<\/code> de\u011fi\u015fkeni ve <code>Hesaplayici<\/code> s\u0131n\u0131f\u0131 bulunmaktad\u0131r.<\/p>\n<h4>Mod\u00fcl \u0130\u00e7e Aktarma (Importing Modules)<\/h4>\n<p>Bir mod\u00fcl\u00fc kullanmak i\u00e7in onu ba\u015fka bir Python beti\u011fine veya etkile\u015fimli kabu\u011fa aktarman\u0131z (import etmeniz) gerekir. Python&#8217;da mod\u00fclleri i\u00e7e aktarman\u0131n birka\u00e7 yolu vard\u0131r:<\/p>\n<h5>1. <code>import module_name<\/code><\/h5>\n<p>Bu, bir mod\u00fcl\u00fcn tamam\u0131n\u0131 i\u00e7e aktarman\u0131n en yayg\u0131n yoludur. Mod\u00fcldeki \u00f6\u011felere eri\u015fmek i\u00e7in <code>module_name.item_name<\/code> s\u00f6zdizimini kullanman\u0131z gerekir.<\/p>\n<pre><code class=\"language-python\"># main_app.py\nimport matematik_islemleri\n\nsonuc_toplama = matematik_islemleri.topla(10, 5)\nprint(f\"Toplama sonucu: {sonuc_islemleri}\") # \u00c7\u0131kt\u0131: Toplama sonucu: 15\n\nsonuc_pi = matematik_islemleri.PI\nprint(f\"PI de\u011feri: {sonuc_pi}\") # \u00c7\u0131kt\u0131: PI de\u011feri: 3.14159\n\nmy_calc = matematik_islemleri.Hesaplayici(100)\nmy_calc.ekle(20)\nprint(f\"Hesaplay\u0131c\u0131n\u0131n mevcut de\u011feri: {my_calc.mevcut_deger()}\") # \u00c7\u0131kt\u0131: Hesaplay\u0131c\u0131n\u0131n mevcut de\u011feri: 120\n<\/code><\/pre>\n<h5>2. <code>import module_name as alias<\/code><\/h5>\n<p>Mod\u00fcl ad\u0131n\u0131n uzun veya karma\u015f\u0131k oldu\u011fu durumlarda, daha k\u0131sa bir takma ad (alias) kullanarak kodu daha okunabilir hale getirebilirsiniz.<\/p>\n<pre><code class=\"language-python\">import matematik_islemleri as mi\n\nsonuc_carpma = mi.carp(7, 8)\nprint(f\"\u00c7arpma sonucu: {sonuc_carpma}\") # \u00c7\u0131kt\u0131: \u00c7arpma sonucu: 56\n<\/code><\/pre>\n<h5>3. <code>from module_name import item1, item2, ...<\/code><\/h5>\n<p>Yaln\u0131zca belirli fonksiyonlar\u0131, s\u0131n\u0131flar\u0131 veya de\u011fi\u015fkenleri i\u00e7e aktarmak istedi\u011finizde bu y\u00f6ntemi kullanabilirsiniz. Bu durumda, i\u00e7e aktar\u0131lan \u00f6\u011felere do\u011frudan adlar\u0131yla eri\u015febilirsiniz, mod\u00fcl ad\u0131n\u0131 belirtmenize gerek kalmaz.<\/p>\n<pre><code class=\"language-python\">from matematik_islemleri import topla, PI\n\nsonuc_toplama = topla(20, 30)\nprint(f\"Toplama sonucu (do\u011frudan): {sonuc_toplama}\") # \u00c7\u0131kt\u0131: Toplama sonucu (do\u011frudan): 50\n\nprint(f\"PI de\u011feri (do\u011frudan): {PI}\") # \u00c7\u0131kt\u0131: PI de\u011feri (do\u011frudan): 3.14159\n<\/code><\/pre>\n<h5>4. <code>from module_name import item as alias<\/code><\/h5>\n<p>\u0130\u00e7e aktard\u0131\u011f\u0131n\u0131z belirli bir \u00f6\u011feye takma ad vermek i\u00e7in bu s\u00f6zdizimini kullanabilirsiniz.<\/p>\n<pre><code class=\"language-python\">from matematik_islemleri import bol as bolme_islemi\n\ntry:\n    sonuc_bolme = bolme_islemi(100, 4)\n    print(f\"B\u00f6lme sonucu: {sonuc_bolme}\") # \u00c7\u0131kt\u0131: B\u00f6lme sonucu: 25.0\n    bolme_islemi(10, 0)\nexcept ValueError as e:\n    print(f\"Hata: {e}\") # \u00c7\u0131kt\u0131: Hata: S\u0131f\u0131ra b\u00f6lme yap\u0131lamaz!\n<\/code><\/pre>\n<h5>5. <code>from module_name import *<\/code><\/h5>\n<p>Bu, bir mod\u00fcldeki t\u00fcm \u00f6\u011feleri (<code>_<\/code> ile ba\u015flamayanlar hari\u00e7) do\u011frudan ge\u00e7erli ad alan\u0131na aktar\u0131r. Ancak, bu y\u00f6ntem genellikle \u00f6nerilmez \u00e7\u00fcnk\u00fc ad \u00e7ak\u0131\u015fmalar\u0131na yol a\u00e7abilir ve kodun hangi \u00f6\u011felerin nereden geldi\u011fini anlamay\u0131 zorla\u015ft\u0131rabilir.<\/p>\n<pre><code class=\"language-python\">from matematik_islemleri import * # Genellikle \u00f6nerilmez!\n\nprint(f\"PI de\u011feri: {PI}\")\nprint(f\"\u00c7\u0131karma sonucu: {cikar(50, 20)}\")\n<h2>Bu durumda, PI ve cikar do\u011frudan kullan\u0131labilir.<\/h2>\n<\/code><\/pre>\n<p><strong>Python Mod\u00fclleri Nas\u0131l Bulur?<\/strong><\/p>\n<p>Python, bir mod\u00fcl\u00fc i\u00e7e aktarmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131nda belirli bir s\u0131rayla dizinleri arar:<\/p>\n<ol>\n<li>Ge\u00e7erli dizin (mod\u00fcl\u00fc \u00e7a\u011f\u0131ran beti\u011fin \u00e7al\u0131\u015ft\u0131\u011f\u0131 dizin).<\/li>\n<li><code>PYTHONPATH<\/code> ortam de\u011fi\u015fkeninde belirtilen dizinler.<\/li>\n<li>Python&#8217;\u0131n standart k\u00fct\u00fcphane dizinleri.<\/li>\n<li><code>.pth<\/code> dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla yap\u0131land\u0131r\u0131lan dizinler (site-packages).<\/li>\n<\/ol>\n<p>Bu arama yollar\u0131na <code>sys.path<\/code> listesi arac\u0131l\u0131\u011f\u0131yla eri\u015febilirsiniz:<\/p>\n<pre><code class=\"language-python\">import sys\nprint(sys.path)\n<\/code><\/pre>\n<h3>Kendi Mod\u00fcl\u00fcn\u00fcz\u00fc Yazmak<\/h3>\n<p>Yukar\u0131daki <code>matematik_islemleri.py<\/code> \u00f6rne\u011fi, kendi mod\u00fcl\u00fcn\u00fcz\u00fc yazman\u0131n temelini g\u00f6sterdi. \u015eimdi daha detayl\u0131 bir \u015fekilde kendi mod\u00fcl\u00fcn\u00fcz\u00fc olu\u015fturman\u0131n ad\u0131mlar\u0131n\u0131 inceleyelim.<\/p>\n<h4>Mod\u00fcl Dosyas\u0131 Olu\u015fturma<\/h4>\n<p>Bir metin d\u00fczenleyici veya IDE kullanarak <code>.py<\/code> uzant\u0131l\u0131 bir dosya olu\u015fturun. Dosya ad\u0131, mod\u00fcl\u00fcn\u00fcz\u00fcn ad\u0131 olacakt\u0131r.<\/p>\n<h4>Mod\u00fcl \u0130\u00e7eri\u011fi<\/h4>\n<p>Mod\u00fcl\u00fcn\u00fcz, Python&#8217;da yazabilece\u011finiz herhangi bir kodu i\u00e7erebilir:<\/p>\n<ul>\n<li><strong>De\u011fi\u015fkenler:<\/strong> Mod\u00fcl d\u00fczeyinde tan\u0131mlanan de\u011fi\u015fkenler, mod\u00fcl\u00fc i\u00e7e aktaran di\u011fer kodlar taraf\u0131ndan eri\u015filebilir.<\/li>\n<li><strong>Fonksiyonlar:<\/strong> Belirli g\u00f6revleri yerine getiren fonksiyonlar mod\u00fcl\u00fcn\u00fcz\u00fcn temel yap\u0131 ta\u015flar\u0131d\u0131r.<\/li>\n<li><strong>S\u0131n\u0131flar:<\/strong> Nesne y\u00f6nelimli programlama i\u00e7in s\u0131n\u0131flar tan\u0131mlayabilirsiniz.<\/li>\n<li><strong>Di\u011fer \u0130\u00e7e Aktarmalar:<\/strong> Mod\u00fcl\u00fcn\u00fcz, di\u011fer mod\u00fclleri de i\u00e7e aktarabilir.<\/li>\n<\/ul>\n<p>\u00d6rnek bir mod\u00fcl (<code>mesajlar.py<\/code>):<\/p>\n<pre><code class=\"language-python\"># mesajlar.py\n\nVERSION = \"1.0.0\"\nAUTHOR = \"Python Developer\"\n\ndef selamla(isim=\"D\u00fcnya\"):\n    \"\"\"Belirtilen ismi selamlar.\"\"\"\n    return f\"Merhaba, {isim}!\"\n\ndef veda_et(isim=\"D\u00fcnya\"):\n    \"\"\"Belirtilen isme veda eder.\"\"\"\n    return f\"G\u00fcle g\u00fcle, {isim}!\"\n\nclass Mesajci:\n    \"\"\"Ki\u015fiselle\u015ftirilmi\u015f mesajlar olu\u015fturan bir s\u0131n\u0131f.\"\"\"\n    def __init__(self, varsayilan_isim=\"Misafir\"):\n        self.varsayilan_isim = varsayilan_isim\n\n    def hos_geldin_mesaji(self, isim=None):\n        gercek_isim = isim if isim else self.varsayilan_isim\n        return f\"Ho\u015f geldiniz, {gercek_isim}! Keyifli vakit ge\u00e7irmenizi dileriz.\"\n\n    def gorusuruz_mesaji(self, isim=None):\n        gercek_isim = isim if isim else self.varsayilan_isim\n        return f\"G\u00f6r\u00fc\u015fmek \u00fczere, {gercek_isim}! Tekrar bekleriz.\"\n<\/code><\/pre>\n<p>Bu mod\u00fcl\u00fc ba\u015fka bir dosyadan nas\u0131l kullan\u0131r\u0131z:<\/p>\n<pre><code class=\"language-python\"># ana_program.py\nimport mesajlar\n\nprint(mesajlar.selamla(\"Alice\")) # \u00c7\u0131kt\u0131: Merhaba, Alice!\nprint(mesajlar.veda_et())       # \u00c7\u0131kt\u0131: G\u00fcle g\u00fcle, D\u00fcnya!\n\nmy_mesajci = mesajlar.Mesajci(\"Bob\")\nprint(my_mesajci.hos_geldin_mesaji()) # \u00c7\u0131kt\u0131: Ho\u015f geldiniz, Bob! Keyifli vakit ge\u00e7irmenizi dileriz.\nprint(my_mesajci.gorusuruz_mesaji(\"Carol\")) # \u00c7\u0131kt\u0131: G\u00f6r\u00fc\u015fmek \u00fczere, Carol! Tekrar bekleriz.\n\nprint(f\"Mod\u00fcl Versiyonu: {mesajlar.VERSION}\") # \u00c7\u0131kt\u0131: Mod\u00fcl Versiyonu: 1.0.0\n<\/code><\/pre>\n<h3>Mod\u00fcl\u00fcn \u00c7al\u0131\u015ft\u0131r\u0131lmas\u0131 ve <code>__name__<\/code> De\u011fi\u015fkeni<\/h3>\n<p>Python&#8217;da her mod\u00fcl\u00fcn \u00f6zel bir global de\u011fi\u015fkeni vard\u0131r: <code>__name__<\/code>. Bu de\u011fi\u015fkenin de\u011feri, mod\u00fcl\u00fcn nas\u0131l kullan\u0131ld\u0131\u011f\u0131na ba\u011fl\u0131d\u0131r.<\/p>\n<ul>\n<li>E\u011fer mod\u00fcl do\u011frudan bir betik olarak \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rsa (\u00f6rne\u011fin, <code>python my_module.py<\/code> komutuyla), <code>__name__<\/code> de\u011fi\u015fkeninin de\u011feri <code>\"__main__\"<\/code> olur.<\/li>\n<li>E\u011fer mod\u00fcl ba\u015fka bir mod\u00fcl taraf\u0131ndan i\u00e7e aktar\u0131l\u0131rsa, <code>__name__<\/code> de\u011fi\u015fkeninin de\u011feri mod\u00fcl\u00fcn kendi ad\u0131 (dosya ad\u0131 uzant\u0131s\u0131z) olur.<\/li>\n<\/ul>\n<p>Bu \u00f6zellik, mod\u00fcllere hem k\u00fct\u00fcphane olarak kullan\u0131labilen hem de kendi kendini test edebilen veya \u00f6rnek kullan\u0131m sa\u011flayan kod eklemek i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-python\"># ornek_modul.py\n\ndef merhaba():\n    return \"Merhaba d\u00fcnyal\u0131!\"\n\ndef test_fonksiyonu():\n    print(\"Test fonksiyonu \u00e7al\u0131\u015f\u0131yor.\")\n    print(f\"Merhaba fonksiyonu: {merhaba()}\")\n\nif __name__ == \"__main__\":\n    print(\"Bu kod sadece mod\u00fcl do\u011frudan \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015f\u0131r.\")\n    print(f\"__name__ de\u011feri: {__name__}\")\n    test_fonksiyonu()\nelse:\n    print(f\"Bu mod\u00fcl i\u00e7e aktar\u0131ld\u0131. __name__ de\u011feri: {__name__}\")\n<\/code><\/pre>\n<p>\u015eimdi bu mod\u00fcl\u00fc farkl\u0131 \u015fekillerde \u00e7al\u0131\u015ft\u0131ral\u0131m:<\/p>\n<ol>\n<li><strong>Do\u011frudan \u00e7al\u0131\u015ft\u0131rma:<\/strong>\n<pre><code class=\"language-bash\">python ornek_modul.py<\/code><\/pre>\n<p>        \u00c7\u0131kt\u0131:<\/p>\n<pre><code>Bu kod sadece mod\u00fcl do\u011frudan \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015f\u0131r.\n__name__ de\u011feri: __main__\nTest fonksiyonu \u00e7al\u0131\u015f\u0131yor.\nMerhaba fonksiyonu: Merhaba d\u00fcnyal\u0131!<\/code><\/pre>\n<\/li>\n<li><strong>Ba\u015fka bir betikten i\u00e7e aktarma:<\/strong>\n<pre><code class=\"language-python\"># baska_betik.py\nimport ornek_modul\n\nprint(\"Ba\u015fka betikten i\u00e7e aktar\u0131ld\u0131.\")\nprint(ornek_modul.merhaba())<\/code><\/pre>\n<p>        <code>baska_betik.py<\/code>&#8216;yi \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda:<\/p>\n<pre><code>Bu mod\u00fcl i\u00e7e aktar\u0131ld\u0131. __name__ de\u011feri: ornek_modul\nBa\u015fka betikten i\u00e7e aktar\u0131ld\u0131.\nMerhaba d\u00fcnyal\u0131!<\/code><\/pre>\n<\/li>\n<\/ol>\n<p><code>if __name__ == \"__main__\":<\/code> blo\u011fu, mod\u00fcllerin kendi i\u00e7 testlerini veya \u00f6rnek kullan\u0131mlar\u0131n\u0131 i\u00e7ermeleri i\u00e7in standart bir Python kal\u0131b\u0131d\u0131r, b\u00f6ylece bu kodlar mod\u00fcl i\u00e7e aktar\u0131ld\u0131\u011f\u0131nda otomatik olarak \u00e7al\u0131\u015fmaz.<\/p>\n<h3>Mod\u00fcl Paketleri Olu\u015fturma<\/h3>\n<p>Mod\u00fcller, tek dosyal\u0131 birimlerdir. Ancak daha b\u00fcy\u00fck uygulamalarda, ilgili mod\u00fclleri bir araya getirmek ve daha hiyerar\u015fik bir yap\u0131 olu\u015fturmak isteyebilirsiniz. \u0130\u015fte burada paketler devreye girer.<\/p>\n<h4>Paket Nedir?<\/h4>\n<p>Bir paket, bir dizin i\u00e7inde organize edilmi\u015f bir mod\u00fcl koleksiyonudur. Python&#8217;\u0131n paket sistemi, dosya sistemi dizinlerini kullanarak mod\u00fcl hiyerar\u015fileri olu\u015fturman\u0131za olanak tan\u0131r. Bir dizinin Python paketi olarak kabul edilmesi i\u00e7in, o dizinin i\u00e7inde \u00f6zel bir dosya olan <code>__init__.py<\/code> bulunmas\u0131 gerekir.<\/p>\n<p>Paket yap\u0131s\u0131 \u00f6rne\u011fi:<\/p>\n<pre><code>my_project\/\n\u251c\u2500\u2500 main.py\n\u2514\u2500\u2500 my_package\/\n    \u251c\u2500\u2500 __init__.py\n    \u251c\u2500\u2500 module_a.py\n    \u2514\u2500\u2500 sub_package\/\n        \u251c\u2500\u2500 __init__.py\n        \u2514\u2500\u2500 module_b.py\n<\/code><\/pre>\n<h4><code>__init__.py<\/code> Dosyas\u0131<\/h4>\n<p><code>__init__.py<\/code> dosyas\u0131, bir dizinin Python paketi oldu\u011funu belirtir. Bu dosya bo\u015f olabilir, ancak ayn\u0131 zamanda paketin ba\u015flatma kodunu da i\u00e7erebilir. \u00d6rne\u011fin, paketin i\u00e7indeki belirli mod\u00fclleri otomatik olarak d\u0131\u015far\u0131ya a\u00e7abilir veya paket d\u00fczeyinde de\u011fi\u015fkenler tan\u0131mlayabilir.<\/p>\n<p>\u00d6rnek <code>my_package\/__init__.py<\/code> (bo\u015f olabilir):<\/p>\n<pre><code class=\"language-python\"># my_package\/__init__.py\n<h2>Bu dosya bo\u015f b\u0131rak\u0131labilir.<\/h2>\n<h2>Ancak paket i\u00e7e aktar\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015facak kodlar da i\u00e7erebilir.<\/h2>\n\nprint(\"my_package paketi ba\u015flat\u0131l\u0131yor...\")\n\n<h2>from . import module_a # Bu \u015fekilde otomatik olarak i\u00e7e aktar\u0131labilir.<\/h2>\n<h2>greeting = \"Merhaba Paketten!\"<\/h2>\n<\/code><\/pre>\n<p>\u00d6rnek <code>my_package\/module_a.py<\/code>:<\/p>\n<pre><code class=\"language-python\"># my_package\/module_a.py\ndef fonksiyon_a():\n    return \"module_a'dan fonksiyon_a \u00e7al\u0131\u015ft\u0131.\"\n<\/code><\/pre>\n<p>\u00d6rnek <code>my_package\/sub_package\/__init__.py<\/code> (bo\u015f olabilir):<\/p>\n<pre><code class=\"language-python\"># my_package\/sub_package\/__init__.py\nprint(\"sub_package alt paketi ba\u015flat\u0131l\u0131yor...\")\n<\/code><\/pre>\n<p>\u00d6rnek <code>my_package\/sub_package\/module_b.py<\/code>:<\/p>\n<pre><code class=\"language-python\"># my_package\/sub_package\/module_b.py\ndef fonksiyon_b():\n    return \"module_b'den fonksiyon_b \u00e7al\u0131\u015ft\u0131.\"\n<\/code><\/pre>\n<h4>Paketlerden \u0130\u00e7e Aktarma<\/h4>\n<p>Paketlerden mod\u00fclleri veya \u00f6\u011feleri i\u00e7e aktarmak i\u00e7in nokta (<code>.<\/code>) notasyonunu kullan\u0131rs\u0131n\u0131z.<\/p>\n<pre><code class=\"language-python\"># main.py\n\n<h2>Tam mod\u00fcl\u00fc i\u00e7e aktarma<\/h2>\nimport my_package.module_a\nprint(my_package.module_a.fonksiyon_a())\n<h2>\u00c7\u0131kt\u0131: my_package paketi ba\u015flat\u0131l\u0131yor...<\/h2>\n<h2>\u00c7\u0131kt\u0131: module_a'dan fonksiyon_a \u00e7al\u0131\u015ft\u0131.<\/h2>\n\n<h2>Belirli bir mod\u00fclden belirli bir \u00f6\u011feyi i\u00e7e aktarma<\/h2>\nfrom my_package.sub_package.module_b import fonksiyon_b\nprint(fonksiyon_b())\n<h2>\u00c7\u0131kt\u0131: sub_package alt paketi ba\u015flat\u0131l\u0131yor... (E\u011fer hen\u00fcz i\u00e7e aktar\u0131lmad\u0131ysa)<\/h2>\n<h2>\u00c7\u0131kt\u0131: module_b'den fonksiyon_b \u00e7al\u0131\u015ft\u0131.<\/h2>\n\n<h2>Paketin kendisinden i\u00e7e aktarma (e\u011fer __init__.py'de tan\u0131ml\u0131ysa)<\/h2>\n<h2>from my_package import greeting<\/h2>\n<h2>print(greeting) # E\u011fer __init__.py'de greeting tan\u0131ml\u0131ysa \u00e7al\u0131\u015f\u0131r<\/h2>\n<\/code><\/pre>\n<p><strong>G\u00f6receli \u0130\u00e7e Aktarmalar (Relative Imports):<\/strong><\/p>\n<p>Bir paketin i\u00e7indeki mod\u00fcller, paketin di\u011fer mod\u00fcllerini veya alt paketlerini i\u00e7e aktarmak i\u00e7in g\u00f6receli i\u00e7e aktarmalar\u0131 kullanabilirler. Bu, paketi ta\u015f\u0131rken veya yeniden adland\u0131r\u0131rken import ifadelerini de\u011fi\u015ftirmek zorunda kalmaman\u0131z\u0131 sa\u011flar.<\/p>\n<ul>\n<li><code>from . import module_name<\/code>: Ayn\u0131 paketteki bir mod\u00fcl\u00fc i\u00e7e aktar\u0131r.<\/li>\n<li><code>from .. import module_name<\/code>: \u00dcst paketteki bir mod\u00fcl\u00fc i\u00e7e aktar\u0131r.<\/li>\n<li><code>from .subpackage import module_name<\/code>: Ayn\u0131 paketin alt paketindeki bir mod\u00fcl\u00fc i\u00e7e aktar\u0131r.<\/li>\n<\/ul>\n<p>\u00d6rnek <code>my_package\/module_a.py<\/code>&#8216;yi g\u00fcncelleyelim:<\/p>\n<pre><code class=\"language-python\"># my_package\/module_a.py\nfrom .sub_package.module_b import fonksiyon_b\n\ndef fonksiyon_a():\n    return f\"module_a'dan fonksiyon_a \u00e7al\u0131\u015ft\u0131 ve {fonksiyon_b()} \u00e7a\u011fr\u0131ld\u0131.\"\n<\/code><\/pre>\n<p>\u015eimdi <code>main.py<\/code>&#8216;den tekrar \u00e7al\u0131\u015ft\u0131ral\u0131m:<\/p>\n<pre><code class=\"language-python\"># main.py\nimport my_package.module_a\nprint(my_package.module_a.fonksiyon_a())\n<h2>\u00c7\u0131kt\u0131: my_package paketi ba\u015flat\u0131l\u0131yor...<\/h2>\n<h2>\u00c7\u0131kt\u0131: sub_package alt paketi ba\u015flat\u0131l\u0131yor...<\/h2>\n<h2>\u00c7\u0131kt\u0131: module_a'dan fonksiyon_a \u00e7al\u0131\u015ft\u0131 ve module_b'den fonksiyon_b \u00e7al\u0131\u015ft\u0131.<\/h2>\n<\/code><\/pre>\n<h4><code>__all__<\/code> De\u011fi\u015fkeni<\/h4>\n<p>Bir paketin <code>__init__.py<\/code> dosyas\u0131nda <code>__all__<\/code> adl\u0131 bir liste tan\u0131mlayarak, <code>from package import *<\/code> ifadesi kullan\u0131ld\u0131\u011f\u0131nda hangi mod\u00fcllerin veya \u00f6\u011felerin i\u00e7e aktar\u0131laca\u011f\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<p>\u00d6rnek <code>my_package\/__init__.py<\/code>:<\/p>\n<pre><code class=\"language-python\"># my_package\/__init__.py\nfrom . import module_a\n<h2>from .sub_package import module_b # module_b'yi do\u011frudan d\u0131\u015far\u0131ya a\u00e7mak isterseniz<\/h2>\n\n__all__ = [\"module_a\"] # Sadece module_a'y\u0131 * ile i\u00e7e aktar\u0131labilir hale getirir.\n<h2>E\u011fer module_b'yi de a\u00e7mak isterseniz: __all__ = [\"module_a\", \"sub_package\"] veya [\"module_a\", \"module_b_ismi\"]<\/h2>\n<\/code><\/pre>\n<p>\u015eimdi <code>main.py<\/code>&#8216;den:<\/p>\n<pre><code class=\"language-python\"># main.py\nfrom my_package import *\n\nprint(module_a.fonksiyon_a()) # \u00c7al\u0131\u015f\u0131r, \u00e7\u00fcnk\u00fc module_a __all__'da tan\u0131ml\u0131.\n<h2>print(sub_package.module_b.fonksiyon_b()) # Hata verir, \u00e7\u00fcnk\u00fc sub_package __all__'da tan\u0131ml\u0131 de\u011fil.<\/h2>\n<\/code><\/pre>\n<h3>Mod\u00fcller ve Hata Y\u00f6netimi<\/h3>\n<p>Mod\u00fcllerle \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz yayg\u0131n hatalardan biri, bir mod\u00fcl\u00fc bulamama veya i\u00e7e aktaramama durumudur.<\/p>\n<ul>\n<li><code>ModuleNotFoundError<\/code>: Python, belirtilen mod\u00fcl\u00fc <code>sys.path<\/code> i\u00e7inde bulamad\u0131\u011f\u0131nda bu hata y\u00fckseltilir.<\/li>\n<li><code>ImportError<\/code>: Genellikle <code>ModuleNotFoundError<\/code>&#8216;\u0131n bir alt s\u0131n\u0131f\u0131d\u0131r veya i\u00e7e aktarmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131z mod\u00fcl\u00fcn i\u00e7inde ba\u015fka bir i\u00e7e aktarma hatas\u0131 oldu\u011funda meydana gelir.<\/li>\n<\/ul>\n<p>Bu hatalar\u0131 <code>try-except<\/code> bloklar\u0131yla y\u00f6netebilirsiniz:<\/p>\n<pre><code class=\"language-python\">try:\n    import non_existent_module\nexcept ModuleNotFoundError:\n    print(\"Hata: non_existent_module bulunamad\u0131.\")\n    # Alternatif bir \u00e7\u00f6z\u00fcm sunabilir veya program\u0131 sonland\u0131rabilirsiniz.\nexcept ImportError as e:\n    print(f\"Hata: Mod\u00fcl i\u00e7e aktar\u0131l\u0131rken bir sorun olu\u015ftu: {e}\")\n<\/code><\/pre>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Etkili ve s\u00fcrd\u00fcr\u00fclebilir Python mod\u00fclleri yazmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir:<\/p>\n<h4>Mod\u00fcl Adland\u0131rma Kurallar\u0131<\/h4>\n<ul>\n<li>Mod\u00fcl adlar\u0131 k\u00fc\u00e7\u00fck harfle yaz\u0131lmal\u0131 ve kelimeler aras\u0131nda alt \u00e7izgi (<code>_<\/code>) kullan\u0131lmal\u0131d\u0131r (\u00f6rne\u011fin, <code>my_module<\/code>, <code>data_processor<\/code>).<\/li>\n<li>Tek kelimelik, anlaml\u0131 adlar tercih edin.<\/li>\n<li>\u00c7izgi (<code>-<\/code>) kullanmaktan ka\u00e7\u0131n\u0131n, \u00e7\u00fcnk\u00fc Python&#8217;da bu bir \u00e7\u0131karma operat\u00f6r\u00fc olarak yorumlan\u0131r.<\/li>\n<\/ul>\n<h4>Docstrings (Belge Dizileri)<\/h4>\n<p>Mod\u00fclleriniz, fonksiyonlar\u0131n\u0131z, s\u0131n\u0131flar\u0131n\u0131z ve metotlar\u0131n\u0131z i\u00e7in a\u00e7\u0131klay\u0131c\u0131 docstring&#8217;ler yaz\u0131n. Bu, kodunuzu belgelemek ve ba\u015fkalar\u0131n\u0131n (ve gelecekteki sizin) ne yapt\u0131\u011f\u0131n\u0131 anlamas\u0131n\u0131 kolayla\u015ft\u0131rmak i\u00e7in \u00e7ok \u00f6nemlidir.<\/p>\n<ul>\n<li>Mod\u00fcl docstring&#8217;i, dosyan\u0131n en \u00fcst\u00fcnde, i\u00e7e aktarma ifadelerinden sonra gelmelidir.<\/li>\n<li>Fonksiyon ve s\u0131n\u0131f docstring&#8217;leri, tan\u0131mlamadan hemen sonra gelmelidir.<\/li>\n<\/ul>\n<pre><code class=\"language-python\"># my_utility.py\n\"\"\"\nBu mod\u00fcl, \u00e7e\u015fitli yard\u0131mc\u0131 fonksiyonlar ve s\u0131n\u0131flar i\u00e7erir.\n\u00d6zellikle dosya i\u015flemleri ve veri d\u00f6n\u00fc\u015f\u00fcmleri i\u00e7in tasarlanm\u0131\u015ft\u0131r.\n\"\"\"\n\ndef read_file(filepath):\n    \"\"\"\n    Belirtilen yoldaki bir dosyay\u0131 okur ve i\u00e7eri\u011fini d\u00f6nd\u00fcr\u00fcr.\n\n    Args:\n        filepath (str): Okunacak dosyan\u0131n yolu.\n\n    Returns:\n        str: Dosyan\u0131n i\u00e7eri\u011fi.\n\n    Raises:\n        FileNotFoundError: Dosya bulunamazsa.\n    \"\"\"\n    with open(filepath, 'r') as f:\n        return f.read()\n\nclass DataProcessor:\n    \"\"\"\n    Veri i\u015fleme ve analiz i\u00e7in temel i\u015flevsellik sa\u011flar.\n    \"\"\"\n    def __init__(self, data):\n        \"\"\"\n        DataProcessor s\u0131n\u0131f\u0131n\u0131 ba\u015flat\u0131r.\n\n        Args:\n            data (list): \u0130\u015flenecek ba\u015flang\u0131\u00e7 verisi.\n        \"\"\"\n        self.data = data\n\n<h2>Docstring'lere eri\u015fim:<\/h2>\nimport my_utility\nprint(my_utility.__doc__)\nprint(my_utility.read_file.__doc__)\nprint(my_utility.DataProcessor.__doc__)\n<\/code><\/pre>\n<h4>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi<\/h4>\n<p>Mod\u00fcl\u00fcn\u00fcz harici k\u00fct\u00fcphanelere ba\u011f\u0131ml\u0131ysa (\u00f6rne\u011fin, <code>requests<\/code>, <code>numpy<\/code>), bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 <code>requirements.txt<\/code> dosyas\u0131na ekleyin. Bu, mod\u00fcl\u00fcn\u00fcz\u00fc kullanan di\u011fer geli\u015ftiricilerin gerekli t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 kolayca kurmas\u0131n\u0131 sa\u011flar (<code>pip install -r requirements.txt<\/code>).<\/p>\n<h4>Test Edilebilirlik<\/h4>\n<p>Mod\u00fcllerinizi k\u00fc\u00e7\u00fck, odaklanm\u0131\u015f birimler halinde yazmak, onlar\u0131 test etmeyi kolayla\u015ft\u0131r\u0131r. Her fonksiyonun ve s\u0131n\u0131f\u0131n belirli bir g\u00f6revi olmal\u0131 ve bu g\u00f6rev ayr\u0131 ayr\u0131 test edilebilir olmal\u0131d\u0131r. <code>unittest<\/code> veya <code>pytest<\/code> gibi test \u00e7er\u00e7evelerini kullanarak mod\u00fclleriniz i\u00e7in birim testleri yaz\u0131n.<\/p>\n<h4>Mod\u00fcl Boyutu ve Kapsam\u0131<\/h4>\n<p>Mod\u00fcllerinizi &#8220;tek sorumluluk prensibi&#8221;ne uygun olarak tasarlay\u0131n. Bir mod\u00fcl, tek bir mant\u0131ksal kavram veya i\u015flevsellik k\u00fcmesi etraf\u0131nda odaklanmal\u0131d\u0131r. \u00c7ok b\u00fcy\u00fck veya \u00e7ok fazla farkl\u0131 \u015feyi yapan mod\u00fcller, y\u00f6netimi ve anla\u015f\u0131lmas\u0131 zor hale gelir.<\/p>\n<h3>Geli\u015fmi\u015f Konulara K\u0131sa Bir Bak\u0131\u015f<\/h3>\n<ul>\n<li><strong>Mod\u00fclleri Yeniden Y\u00fckleme (Reloading Modules):<\/strong> Geli\u015ftirme s\u0131ras\u0131nda, bir mod\u00fcl\u00fc de\u011fi\u015ftirdikten sonra Python&#8217;\u0131 yeniden ba\u015flatmadan g\u00fcncellenmi\u015f versiyonunu y\u00fcklemek isteyebilirsiniz. <code>importlib.reload()<\/code> fonksiyonu bu ama\u00e7la kullan\u0131l\u0131r. Ancak, genellikle \u00fcretim kodunda kullan\u0131lmaz ve dikkatli olunmas\u0131 gerekir.<\/li>\n<li><strong>Dinamik \u0130\u00e7e Aktarmalar:<\/strong> Baz\u0131 durumlarda, bir mod\u00fcl\u00fcn ad\u0131n\u0131 \u00e7al\u0131\u015fma zaman\u0131nda belirleyerek dinamik olarak i\u00e7e aktarman\u0131z gerekebilir. <code>importlib.import_module()<\/code> fonksiyonu bu senaryolar i\u00e7in idealdir.<\/li>\n<li><strong>C Uzant\u0131lar\u0131:<\/strong> Performans kritik durumlarda, Python mod\u00fcllerini C veya C++ gibi dillerde yazabilir ve bunlar\u0131 Python&#8217;dan \u00e7a\u011f\u0131rabilirsiniz. Bu, genellikle <code>ctypes<\/code> veya <code>Cython<\/code> gibi ara\u00e7larla yap\u0131l\u0131r.<\/li>\n<\/ul>\n<h3>Sonu\u00e7<\/h3>\n<p>Python&#8217;da mod\u00fcl yaz\u0131m\u0131, temiz, d\u00fczenli ve yeniden kullan\u0131labilir kodlar olu\u015fturman\u0131n temelidir. Bu rehberde, basit mod\u00fcllerden paketlere kadar Python mod\u00fcl sisteminin t\u00fcm \u00f6nemli y\u00f6nlerini ele ald\u0131k. Mod\u00fcllerin nas\u0131l tan\u0131mland\u0131\u011f\u0131n\u0131, farkl\u0131 i\u00e7e aktarma y\u00f6ntemlerini, <code>__name__<\/code> de\u011fi\u015fkeninin \u00f6nemini ve paketlerin nas\u0131l yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 \u00f6\u011frendik. Ayr\u0131ca, mod\u00fcl yazarken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken en iyi uygulamalar\u0131 ve ipu\u00e7lar\u0131n\u0131 da inceledik.<\/p>\n<p>Kodunuzu mod\u00fcler bir \u015fekilde d\u00fczenlemek, b\u00fcy\u00fck projeleri y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r, hata ay\u0131klama s\u00fcrecini h\u0131zland\u0131r\u0131r ve geli\u015ftirme verimlili\u011finizi art\u0131r\u0131r. Python&#8217;\u0131n mod\u00fcl sistemi, g\u00fc\u00e7l\u00fc ve esnek uygulamalar olu\u015fturman\u0131z i\u00e7in size sa\u011flam bir temel sunar. Bu bilgileri kullanarak, kendi projelerinizde daha organize ve s\u00fcrd\u00fcr\u00fclebilir kodlar yazmaya ba\u015flayabilirsiniz.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Python 3&#8217;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber\nPython, okunabilirli\u011fi ve sadeli\u011fi ile bilinen pop\u00fcler bir programlama dilidir. B\u00fcy\u00fck ve karma","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1403],"tags":[],"class_list":{"0":"post-32680","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Python 3&#039;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python 3&#039;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Python 3&#039;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber Python, okunabilirli\u011fi ve sadeli\u011fi ile bilinen pop\u00fcler bir programlama dilidir. B\u00fcy\u00fck ve karma\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-24T15:42:02+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python 3&#8217;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-10-24T15:42:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/\"},\"wordCount\":2012,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/\",\"name\":\"Python 3'te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-24T15:42:02+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python 3&#8217;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Python 3'te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Python 3'te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber","og_description":"Python 3'te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber Python, okunabilirli\u011fi ve sadeli\u011fi ile bilinen pop\u00fcler bir programlama dilidir. B\u00fcy\u00fck ve karma","og_url":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-24T15:42:02+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python 3&#8217;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber","datePublished":"2025-10-24T15:42:02+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/"},"wordCount":2012,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/","name":"Python 3'te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-24T15:42:02+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-3te-modul-yazimi-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python 3&#8217;te Mod\u00fcl Yaz\u0131m\u0131: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32680"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32680\/revisions"}],"predecessor-version":[{"id":32681,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32680\/revisions\/32681"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}