Skip to content

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
IPython: Standart REPL'in 'Süper Güçler' Versiyonu
✨ 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]:
>>>
yerine
In [1]:
görüyorsun. Numara, her komutla birlikte artıyor. Output da
Out[1]:
şeklinde işaretli — geriye dönüp output'a referans verebiliyorsun.

Output history —
In
,
Out
,
_
#

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'
In
ve
Out
aslında dictionary. Önceki herhangi bir komutu/sonucu koddan çağırabilirsin:
In [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...
??
(iki soru işareti) kaynak kodu gösterir:
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 (
    %komut
    ): Tek satır.
  • Cell magic (
    %%komut
    ): Bütün hücre/blok.

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/
klasörüne
.py
dosyası koyarsan, IPython her açılışta çalıştırır. Sıralı çalışsın diye dosyaları
00-imports.py
,
10-helpers.py
gibi prefix'le.
Ö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
ipython
her açtığında 20 import otomatik yapılmış. Veri analizi başlamak için ekstra setup gerekmiyor.

ipython_config.py — derinlemesine kişiselleştirme#

Profile içinde
ipython_config.py
dosyası IPython'un her özelliğini değiştirebileceğin yer:
# ~/.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 —
%timeit
IPython'da da Jupyter'da da çalışıyor. Aralarındaki fark sadece UI:
IPythonJupyter
ArayüzTerminalWeb tarayıcı
CellTek satır iterÇoklu cell
Görsel outputASCIIMarkdown, HTML, plot inline
Save%save manuel.ipynb otomatik
SharingPastebin / 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
In
,
Out
,
_
,
__
,
___
operatörleri.
?
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
~/.ipython/profile_default/startup/
ile her oturumda otomatik setup.
ipython_config.py
ile derin kişiselleştirme.
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