Python, kısa sözdizimi ve zengin kütüphane ekosistemiyle bilinen üst düzey yorumlanmış bir programlama dilidir. Mobil geliştirmede Python, derleme otomasyonu için yardımcı betikler, AI/ML modellerinin eğitimi ve Django veya FastAPI ile sunucu tarafı mantığı yazmak için kullanılır. PYPL (2026)'ye göre Python, programlama dilleri arasında dünyada popülerlikte birinci sıradadır.
Önemli Noktalar
Python, dinamik güçlü tiplendirme ve otomatik bellek yönetimine sahip yorumlanmış bir dildir. 1991 yılında Guido van Rossum tarafından oluşturulmuştur. Dil felsefesi (Python'un Zen'i) kod okunabilirliğini teşvik eder: «açık olan örtük olandan iyidir», «basit olan karmaşıktan iyidir». Python 3.12+ desen eşleştirmeyi (match-case) ve geliştirilmiş jenerikleri destekler.
Python standart kütüphanesi, JSON (json), HTTP (urllib), arşivler (zipfile), düzenli ifadeler (re) ve veritabanları (sqlite3) ile çalışmak için modüller içerir. Üçüncü taraf — PyPI'de toplam 500 milyardan fazla indirmeye sahip on binlerce paket. PyPI (Python Package Index) en büyük Python paket deposudur.
Python, C dilinde yazılmış CPython yorumlayıcısını kullanır. Alternatif uygulamalar: PyPy (JIT derleme, saf Python için 2–5 kat daha hızlı), Cython (Python'u C'ye derleme), Numba (sayısal hesaplama için JIT). Mobil betikler için CPython yeterlidir — otomasyon görevleri için yorumlama hızı kritik değildir.
Python 2 desteği 2020'de sona ermiştir. Tüm modern projeler Python 3 kullanır. Güncel sürüm, geliştirilmiş JIT derleyici ve deneysel free-threaded Python desteğiyle 3.13'tür (2025). Mobil geliştirme için 3.11–3.12 sürümleri kararlıdır ve tüm ana kütüphanelerle uyumludur.
| Sürüm | Yıl | Temel Yenilik |
|---|---|---|
| Python 3.6 | 2016 | f-strings, değişkenler için tür ipuçları |
| Python 3.8 | 2019 | walrus operatörü (:=), yalnızca konumsal parametreler |
| Python 3.10 | 2021 | match-case, hassas türler, Union operatörleri |
| Python 3.11 | 2022 | CPython hızlandırması %10–60, istisna grupları |
| Python 3.12 | 2023 | Tiplendirmede işlev aşırı yükleme desteği |
| Python 3.13 | 2025 | JIT derleyici, free-threaded modu |
Python, mobil geliştirmede otomasyon betikleri için birincil dildir. APK ve IPA derlemek, dize kaynaklarını işlemek, düzenlerden ekranlar oluşturmak ve uygulama mağazalarına dağıtmak için kullanılır. Bitrise'e (2025) göre, mobil uygulamaların CI/CD hatlarının %60'ından fazlası Python adımları içerir.
En yaygın senaryo — Fastlane Ruby ile tüm ihtiyaçları karşılamaz ve Python onu tamamlar: karmaşık görüntü işleme mantığı, App Store Connect API'si ile çalışma, Xcode raporlarını ayrıştırma ve ekran görüntüsü oluşturma. Python betikleri Fastfile'daki sh adımları veya doğrudan GitHub Actions üzerinden çağrılır.
# Uygulama ekran görüntülerini otomatik yeniden boyutlandırma betiği
import os
from PIL import Image
def resize_screenshots(input_dir: str, output_dir: str, size: tuple) -> None:
"""Tüm PNG ekran görüntülerini gerekli mağaza boyutuna yeniden boyutlandırır."""
for filename in os.listdir(input_dir):
if not filename.lower().endswith(".png"):
continue
path = os.path.join(input_dir, filename)
img = Image.open(path)
resized = img.resize(size, Image.LANCZOS)
out_path = os.path.join(output_dir, filename)
resized.save(out_path, "PNG")
print(f"Resized {filename} -> {out_path}")
resize_screenshots("screenshots_raw", "screenshots_resized", (1242, 2208))Örnekte, betik bir klasördeki tüm PNG dosyalarını dolaşır, bunları en iyi kalite için LANCZOS filtresiyle iPhone 6.5" boyutuna (1242x2208) yeniden boyutlandırır. print'teki f-string dosya adını değiştirir. Bu betik, mağaza hazırlığında saatlerce manuel işten tasarruf sağlar.
Android için Python, dize kaynaklarını (strings.xml) işleme, farklı ekran yoğunlukları için dimen dosyaları oluşturma ve vektör grafiklerini dönüştürmede kullanışlıdır. LXML ve xml.etree.ElementTree, Android XML kaynaklarını ayrıştırmaya ve değiştirmeye olanak tanır.
# Çeviriler içeren CSV dosyasından strings.xml oluşturma
import csv
from xml.etree import ElementTree as ET
from xml.dom import minidom
def csv_to_strings(csv_path: str, lang: str) -> str:
root = ET.Element("resources")
with open(csv_path, "r") as f:
reader = csv.DictReader(f)
for row in reader:
el = ET.SubElement(root, "string")
el.set("name", row["key"])
el.text = row[lang]
rough = ET.tostring(root, encoding="unicode")
parsed = minidom.parseString(rough.encode())
return parsed.toprettyxml(indent=" ")
print(csv_to_strings("translations.csv", "ru"))Python, makine öğrenimi için birincil dildir. TensorFlow, PyTorch, scikit-learn, JAX ve Hugging Face Transformers Python için yazılmıştır. Mobil geliştiriciler, daha sonra cihazda çalıştırma için TFLite (Android) veya Core ML'ye (iOS) dönüştürülen modelleri eğitmek için Python kullanır.
TensorFlow Lite, Google'ın cihaz içi makine öğrenimi çerçevesidir. Python'da eğitilmiş bir model, TensorFlow Converter aracılığıyla .tflite'a dönüştürülür ve Interpreter API'si aracılığıyla bir Android uygulamasına yüklenir. iOS için benzer bir hat PyTorch -> Core ML kullanır.
# Hareket sınıflandırması için basit bir modelin eğitimi
import tensorflow as tf
from tensorflow import keras
model = keras.Sequential([
keras.layers.Input(shape=(64, 64, 3)),
keras.layers.Conv2D(32, (3, 3), activation="relu"),
keras.layers.MaxPooling2D(2, 2),
keras.layers.Conv2D(64, (3, 3), activation="relu"),
keras.layers.Flatten(),
keras.layers.Dense(128, activation="relu"),
keras.layers.Dropout(0.2),
keras.layers.Dense(4, activation="softmax")
])
model.compile(optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
# Eğitimden sonra TFLite'a dönüştürme
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
with open("gesture_model.tflite", "wb") as f:
f.write(tflite_model)
print(f"Model size: {len(tflite_model)} bytes")Sequential modeli, havuzlamalı iki evrişimli katman (Conv2D), tam bağlantılı bir katman (Dense) ve düzenlileştirme için Dropout içerir. Dönüştürmeden sonra .tflite modeli, orijinal SavedModel'den 4–6 kat daha az yer kaplar ve mobil CPU veya GPU'da çalışır.
Modern bir yaklaşım — TensorFlow Federated veya MLX (Apple) ile doğrudan cihazda eğitim. Python betiği mimariyi tanımlarken, eğitim sunucuya göndermeden kullanıcı verilerinde çalışır. Bu, gizliliği artırır ancak uygulaması daha karmaşıktır. Çoğu proje klasik hattı kullanır: Python eğitimi -> TFLite -> cihaz içi çıkarım.
Python, mobil uygulama arka uçları için popüler bir seçimdir. Django REST Framework (DRF) ve FastAPI, hızlı bir şekilde REST API veya GraphQL sunucuları oluşturmayı sağlar. Python arka ucu, mobil istemcilerden gelen istekleri işler, kimlik doğrulamayı yönetir ve WebSocket aracılığıyla verileri senkronize eder.
FastAPI, asenkron destek, otomatik OpenAPI belirtimi oluşturma ve Pydantic aracılığıyla doğrulama sunan modern bir çerçevedir. FastAPI'nin performansı Node.js ve Go ile karşılaştırılabilir — tek bir çekirdekte saniyede 10.000 isteğe kadar. Mobil arka uçlar için FastAPI, geliştirme hızı ve yerleşik dokümantasyon nedeniyle seçilir.
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List
import sqlite3
app = FastAPI(title="Mobile App API")
class UserCreate(BaseModel):
username: str
email: str
avatar_url: str | None = None
@app.post("/users", status_code=201)
async def create_user(payload: UserCreate):
conn = sqlite3.connect("app.db")
cur = conn.execute(
"INSERT INTO users (username, email) VALUES (?, ?)",
(payload.username, payload.email)
)
conn.commit()
user_id = cur.lastrowid
conn.close()
return {"id": user_id, "username": payload.username}
@app.get("/users/{user_id}")
async def get_user(user_id: int):
conn = sqlite3.connect("app.db")
row = conn.execute(
"SELECT id, username, email FROM users WHERE id = ?",
(user_id,)
).fetchone()
conn.close()
if not row:
raise HTTPException(status_code=404, detail="User not found")
return {"id": row[0], "username": row[1], "email": row[2]}Pydantic modeli UserCreate, giriş verilerini doğrular: username ve email zorunlu dizelerdir, avatar_url isteğe bağlıdır. Asenkron uç noktalar (async def), veritabanını beklerken sunucuyu bloke etmez. Başarılı kullanıcı oluşturmada durum kodu 201 döndürülür.
Python, FastAPI WebSocket veya websockets kütüphanesi aracılığıyla WebSocket'i destekler. Sohbetler, gerçek zamanlı bildirimler ve ortak düzenleme için WebSocket en uygun taşıma yöntemidir. FastAPI, asenkron PostgreSQL erişimi için asyncpg ve önbellekleme için aioredis kullanır.
Python hızlı prototip oluşturma için vazgeçilmezdir. Bir geliştirici, 15 dakikada Flask'ta bir prototip API yazabilir ve fikri üretim için Kotlin/Swift'te uygulamadan önce kullanıcılarla test edebilir. Prototip aşamasında bir hatanın maliyeti minimumdur ve hipotez test süresi haftalardan saatlere iner.
Prototip oluşturma araçları: Flask (minimal REST), Streamlit (panolar), Jupyter Notebooks (veri analizi), Flet ve Kivy (mobil MVP'ler). Bir Python prototipi genellikle üretim uygulaması için belirtim haline gelir: veri türleri, iş mantığı ve testler Kotlin veya Swift'e taşınır.
Python, Locust ile mobil API yük testi için kullanılır — binlerce kullanıcıyı simüle etmek için bir çerçeve. Locust betiği, kullanıcı davranış senaryolarını tanımlar ve web arayüzü RPS, gecikme süreleri ve yüzdelik dilimleri gösterir.
from locust import HttpUser, task, between
class MobileApiUser(HttpUser):
wait_time = between(1, 5)
@task(2)
def get_posts(self):
self.client.get("/api/v1/posts?page=1")
@task(1)
def create_post(self):
self.client.post("/api/v1/posts", json={
"title": "Test",
"body": "Content"
})@task(2) ağırlığı belirtir — GET /posts istekleri, POST /posts isteklerinden iki kat daha sık yürütülür. wait_time, istekler arasında 1–5 saniyelik bir duraklama simüle eder. Locust, komut satırından başlatılır ve 8089 portundaki bir web arayüzü aracılığıyla gerçek zamanlı sonuçları gösterir.
Python ve yerel mobil diller farklı sorunları çözer. Kotlin ve Swift, UI, gezinme ve doğrudan platform API'sine erişim içindir. Python, otomasyon, AI/ML, sunucu mantığı ve prototip oluşturma içindir. Ana parametreleri karşılaştıralım.
| Kriter | Python | Kotlin / Swift |
|---|---|---|
| UI uygulaması | Hayır (Kivy — niş) | Ana amaç |
| Derleme otomasyonu | Birincil araç | Nadiren |
| AI/ML eğitimi | Sektörün birincil dili | Sadece çıkarım |
| Sunucu arka ucu | Django, FastAPI, Flask | Ktor, Vapor (daha az popüler) |
| Geliştirme hızı | Yüksek (daha az kod) | Orta |
| Performans | Düşük (yorumlanmış) | Yüksek (JIT/yerel) |
| Cihaz API'sine erişim | Chaquopy/BeeWare ile | Doğrudan (%100 API) |
Optimum mimari: Python AI/model eğitimi, CI/CD betikleri ve sunucu tarafı için; Kotlin/Swift UI ve yerel entegrasyon için.
İlk hata — yanlış Python sürümünü kullanmak. macOS, Python 3.9 ön yüklü olarak gelir, ancak otomasyon betikleri pyenv veya .python-version ile sabitlenmiş bir sürüm gerektirir. 3.9 ve 3.12 arasındaki fark sözdizimini bozabilir (örneğin, match-case yalnızca 3.10'dan itibaren kullanılabilir).
İkinci yaygın hata — sanal ortamları göz ardı etmek. Python bağımlılıkları projeler arasında genel olarak çakışır. İzolasyon için venv veya poetry kullanın. Tekrarlanabilir derlemeler için requirements.txt veya pyproject.toml dosyası depoda bulunmalıdır.
Hata işleme eksikliği — üçüncü yaygın sorun. Dosya eksikliği veya ağ hatasında çöken bir betik, tüm CI/CD hattını durdurur. try-except-finally, logging modülü aracılığıyla günlük kaydı kullanın ve hata durumunda sıfır olmayan kod döndürün (sys.exit(1)).
Python 2 ve Python 3 sözdizimini karıştırmak — başka bir hata. Parantezsiz print, eski except Exception, e ve xrange Python 2'de çalışıyordu ancak Python 3'te çalışmaz. Statik tür analizi için kodu her zaman flake8 ve mypy ile kontrol edin.
# En iyi uygulama: otomasyon betiğinde hata işleme
import sys
import logging
from pathlib import Path
logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
log = logging.getLogger(__name__)
def build_apk(project_dir: str) -> bool:
path = Path(project_dir)
if not path.exists():
log.error(f"Directory {project_dir} not found")
return False
try:
# derleme komutu burada
log.info("Build started")
return True
except Exception as e:
log.exception(f"Build failed: {e}")
return False
if __name__ == "__main__":
success = build_apk("android/app")
sys.exit(0 if success else 1)Sıkça Sorulan Sorular
Evet, Kivy, BeeWare ve Chaquopy (Android için) çerçeveleri aracılığıyla mümkündür. Ancak, Kotlin/Swift'teki yerel uygulamalar daha hızlı çalışır ve platform API'sine tam erişim sağlar. Python genellikle prototip oluşturma ve yardımcı araçlar için kullanılır.
Python, IPA/APK derleme, test raporu oluşturma, günlük işleme, ekran yeniden boyutlandırma, kaynak dönüştürme ve Fastlane Python eklentileri aracılığıyla Firebase App Distribution'a dağıtımı otomatikleştirir.
Modeller Python'da (TensorFlow, PyTorch) eğitilir, ardından cihaz içi çıkarım için TFLite veya Core ML'ye dönüştürülür. Kotlin/Swift'teki yerel ML kütüphaneleri hazır modeli yüklerken, Python eğitim ve dışa aktarmayı üstlenir.
Mobil bir arka uç için Python (Django/FastAPI) mükemmel bir seçimdir. Geliştirmesi daha hızlıdır ve zengin bir kütüphane ekosistemine sahiptir. Kotlin (Ktor) ve Swift (Vapor) daha iyi performans ve tür güvenliği sunar.
Python yorumlanmış bir dil olarak C++ ve Kotlin'den daha yavaştır. Ancak derleme betikleri, kod oluşturma ve prototip oluşturma için Python'un hızı kritik değildir. AI/ML için model eğitimi cihazda değil, GPU sunucularında yapılır.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun