IPython: Standart REPL'in 'Süper Güçler' Versiyonu
IPython sadece daha güzel renkli bir REPL değil. %timeit ile mikrosaniye benchmark, ?? ile kaynak kodu görme, !ls ile shell escape, %save ile dosyaya yazma — bütün veri bilimi/AI dünyası bu komutlar üzerinde dönüyor. Bu ders sana 'günlük 50 kez kullanacağın' magic'leri tek tek öğretir.
Şükrü Yusuf KAYA
19 min read
Beginner✨ Bu ders neden önemli?
Python öğrenirken IPython'u 'sadece daha şirin bir Python' diye görenler çok. Aslında IPython, Jupyter Notebook'un altında çalışan kernel; veri bilimi tüm akışının görünmez omurgası. Magic command'leri öğrenmeden Jupyter kullanmak, klavyenin sadece harf tuşlarını kullanmak gibi — yapabilirsin ama %50 hızda çalışırsın.
Önce küçük bir tarih#
2001 yılı. Fernando Pérez adında genç bir fizikçi, Colorado Üniversitesi'nde doktora yapıyor. Standart Python REPL'i ile çalışmak yetersiz hissettiriyor — bilim adamlarının ihtiyacı olan tab completion, history, syntax highlight, embedded plotting yok.
Bir hafta tatilde, "Interactive Python" diye küçük bir alternatif yazıyor. Yıllar geçiyor. Topluluk büyüyor. 2014'te Jupyter Notebook ile birlikte bilim dünyasının standart Python interface'i oluyor.
Bugün IPython:
- Default Jupyter kernel — Jupyter notebook her cell çalıştırdığında IPython çalışıyor.
- Veri bilimi standart — pandas, NumPy, scikit-learn ile sıkça kullanılan REPL.
- Modern Python REPL'lerinin ilham kaynağı — Python 3.13'ün gelişmiş default REPL'i, IPython'dan ilham aldı.
Yani IPython'u öğrenmek sadece "bir alternatif" değil, Python ekosisteminin önemli bir parçasını öğrenmek demek.
Kurulum#
pip install ipython
Eğer pyenv kullanıyorsan:
# Belirli sürüme global olarak yükle pyenv shell 3.13.0 pip install ipython # Veya virtualenv'e python -m venv venv && source venv/bin/activate pip install ipython
Pratik tavsiye: IPython'u her Python kurulumuna ekle (her venv'e), çünkü "bir bilgiyi hızlıca incelemek için" IPython'a girmek senin günlük alışkanlığın olacak.
Başlatmak için:
ipython
Açılışta:
Python 3.13.0 (main, Oct 1 2024, 11:15:50) Type 'copyright', 'credits' or 'license' for more information IPython 8.27.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
>>>In [1]:Out[1]:Output history — In, Out, _#
InOut_In [1]: 5 + 3 Out[1]: 8 In [2]: "hello".upper() Out[2]: 'HELLO' In [3]: Out[1] * 2 Out[3]: 16 In [4]: _ # son output Out[4]: 16 In [5]: __ # bir öncekisi Out[5]: 'HELLO' In [6]: ___ # iki öncekisi Out[6]: 8 In [7]: _2 # In[2]'nin output'u Out[7]: 'HELLO' In [8]: In[3] # 3. komutun string hali Out[8]: 'Out[1] * 2'
InOutIn [9]: print(In[1]) 5 + 3
Bu özellik veri keşfinde altın değerinde — bir sorgu sonucunu kaydetmeden geri çağırabiliyorsun.
? ve ?? — anında help#
???IPython'un en sevilen özelliği. herhangi bir nesneye attribute olarak ekle:
?In [1]: str.upper? Signature: str.upper(self, /) Docstring: Return a copy of the string converted to uppercase. Type: method_descriptor In [2]: list.sort? Signature: list.sort(self, /, *, key=None, reverse=False) Docstring: Sort the list in ascending order and return None. The sort is in-place (i.e. the list itself is modified) and stable...
??In [3]: import requests In [4]: requests.get?? Signature: requests.get(url, params=None, **kwargs) Source: def get(url, params=None, **kwargs): r"""Sends a GET request. ... """ return request("get", url, params=params, **kwargs)
Bu özellik muhteşem. Bir kütüphanenin nasıl çalıştığını dokümantasyonda aramak yerine doğrudan kaynak kodunu görüyorsun.
Wildcard search:
In [5]: import os In [6]: os.path.j*? # j ile başlayan tüm attribute'lar os.path.join In [7]: os.path.*split*? # split içeren os.path.split os.path.splitdrive os.path.splitext
Magic commands — % ile başlayan sihirli komutlar#
%IPython'un ana farklılaştırıcı özelliği: magic commands. ile başlar, IPython-spesifik işler yaparlar.
%İki tür var:
- Line magic (): Tek satır.
%komut - Cell magic (): Bütün hücre/blok.
%%komut
Bütün magic'leri listele#
In [1]: %lsmagic Available line magics: %alias %autoawait %cd %clear %colors %copy %cp %debug %dirs %doctest_mode %edit %env %history %killbgscripts %ldir %less %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %ls %lsmagic %macro %magic %matplotlib %mkdir %more %mv %notebook %paste %pastebin %pdb %pdef %pdoc %pfile %pinfo %popd %pprint %precision %prun %psearch %psource %pushd %pwd %pylab %quickref %recall %rerun %reset %reset_selective %rm %rmdir %run %save %sc %set_env %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode Available cell magics: %%! %%bash %%capture %%debug %%file %%html %%javascript %%js %%latex %%markdown %%perl %%prun %%pypy %%python %%python2 %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit %%writefile Automagic is ON, % prefix IS NOT needed for line magics.
50+ magic var ama günlük kullanacağın 10-15 tanesi. Şimdi onları gezelim.
Python'da bir kod parçasının ne kadar sürdüğünü ölçer. Otomatik olarak en iyi sonucu vermek için birden fazla kez çalıştırır.
In [1]: %timeit sum(range(1000)) 6.24 µs ± 102 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each) In [2]: %timeit [i for i in range(1000)] 13.8 µs ± 156 ns per loop In [3]: %timeit -n 100 -r 5 sum(range(1000)) # 100 loops, 5 runs
Cell magic %%timeit ile çoklu satır:
In [4]: %%timeit ...: total = 0 ...: for i in range(1000): ...: total += i 26.4 µs ± 412 ns per loop
Optimizasyon kararlarının arkasında genelde %timeit benchmark'ları var. Veri bilimi/AI dünyasında günde defalarca kullanılır.
IPython startup — kişisel config#
IPython da PYTHONSTARTUP gibi bir başlangıç dosyası destekler ama daha gelişmiş.
ipython profile create # Created profile at: ~/.ipython/profile_default/
~/.ipython/profile_default/startup/.py00-imports.py10-helpers.pyÖrnek :
~/.ipython/profile_default/startup/00-imports.py"""Standard imports for every IPython session.""" import sys import os import json import re from pathlib import Path from datetime import datetime, timedelta from collections import Counter, defaultdict, deque from itertools import chain, islice, product, combinations print(f"📦 Pre-imports: json, re, Path, datetime, Counter, itertools utils")
Veri bilimi için:
"""01-data-science.py""" try: import numpy as np import pandas as pd pd.set_option("display.max_columns", 50) pd.set_option("display.width", 200) pd.set_option("display.max_colwidth", 100) import matplotlib.pyplot as plt import seaborn as sns sns.set_theme(style="darkgrid") print("📊 numpy (np), pandas (pd), matplotlib.pyplot (plt), seaborn (sns) loaded") except ImportError as e: print(f"⚠️ Optional data-science deps missing: {e}")
Bu kurulumla her açtığında 20 import otomatik yapılmış. Veri analizi başlamak için ekstra setup gerekmiyor.
ipythonipython_config.py — derinlemesine kişiselleştirme#
Profile içinde dosyası IPython'un her özelliğini değiştirebileceğin yer:
ipython_config.py# ~/.ipython/profile_default/ipython_config.py c = get_config() # noqa # Theme (renk şeması) c.TerminalInteractiveShell.colors = "Linux" # Linux | LightBG | NoColor # Otomatik magic (% olmadan magic çağırma) c.InteractiveShell.automagic = True # Multiline edit (yukarı arrow ile multi-line history) c.TerminalInteractiveShell.multiline_history = True # Confirm exit c.TerminalInteractiveShell.confirm_exit = False # History limit c.HistoryAccessor.hist_file = "~/.ipython/history.sqlite" # Default editor (%edit komutu için) c.TerminalInteractiveShell.editor = "vim" # Banner kapat c.TerminalInteractiveShell.banner1 = "" # Auto-import every session c.InteractiveShellApp.exec_lines = [ "import numpy as np", "import pandas as pd", ]
Bu config'ler IPython'u kendi tercihlerine göre yontmana imkan veriyor. Üretken bir kullanıcı yıllar içinde 30-40 satırlık özel config'le çalışıyor.
IPython vs Jupyter Notebook#
İkisi sıkça karıştırılır. Aslında ilişki net:
- IPython = gelişmiş REPL (terminal-tabanlı).
- Jupyter Notebook = Web tarayıcısında, hücreli, görsel arayüz. Altta IPython kernel kullanıyor.
İkisi de aynı magic command'leri destekler — IPython'da da Jupyter'da da çalışıyor. Aralarındaki fark sadece UI:
%timeit| IPython | Jupyter | |
|---|---|---|
| Arayüz | Terminal | Web tarayıcı |
| Cell | Tek satır iter | Çoklu cell |
| Görsel output | ASCII | Markdown, HTML, plot inline |
| Save | %save manuel | .ipynb otomatik |
| Sharing | Pastebin / GitHub gist | .ipynb GitHub'da render |
Gerçek kullanım: terminale yakın iş için (script test, küçük analiz, debugging) IPython, görsel/eğitim/dokümantasyon için Jupyter.
Sıradaki ders Jupyter'i detaylı anlatıyor — IPython bu dersin önbasamağı.
Bu derste neler kazandın?#
✓ IPython'un doğum hikâyesi ve neden bu kadar yaygın olduğu.
✓ Output history — , , , , operatörleri.
InOut______✓ ve — anında help ve kaynak kodu.
???✓ 12 magic command — %timeit, %time, %history, %save, %load, %run, %who, %whos, %paste, !, %debug/%pdb, %autoreload, %matplotlib.
✓ Profile sistemi — ile her oturumda otomatik setup.
~/.ipython/profile_default/startup/✓ ile derin kişiselleştirme.
ipython_config.py✓ IPython vs Jupyter ilişkisi.
Sıradaki ders: Jupyter Notebook ve JupyterLab — bilim/AI dünyasının en görünür arayüzü. Notebook anatomisi, hücre tipleri, magic commands derinleşir, paylaşma stratejileri (Colab, Kaggle, Binder), ve "production'da Jupyter neden kötü fikir" tartışması.
Frequently Asked Questions
Hayır — Jupyter Notebook'un default kernel'ı IPython. Pip ile Jupyter kurduğunda otomatik IPython da gelir. Ama farklı diller için kernel'ler de var (R, Julia, Bash) — bunlarla Jupyter notebook'larını çalıştırabilirsin ama Python için her zaman IPython altta.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
Related Content
Modül 1: Giriş ve Kurulum
Python Nedir, Neden Bu Kadar Popüler?
Start LearningModül 1: Giriş ve Kurulum
Python Sürümlerinin Tarihi: 2'den 3.14'e, AI Winter'lardan 'No-GIL' Devrimine
Start LearningModül 1: Giriş ve Kurulum