All guides

Best Python Practice Sites for Every Level (2026)

Where to practise Python after the tutorials: Exercism, Python Morsels, PyBites, CS50P, Codewars and more, matched to your level

LearningComparison

dataclasses vs Pydantic vs attrs: Which to Use

Python’s dataclasses, Pydantic, and attrs all cut class boilerplate, but only some validate data. Here’s which to reach for and why

ComparisonData Modelling

How to Publish a Python Package to PyPI (2026)

Build your package, test it on TestPyPI, then publish to PyPI with twine, uv, Hatch, or Poetry, plus trusted publishing from GitHub Actions

PackagingTutorial

Porting to Python 3.15: What Breaks and How to Fix It

What actually breaks when you upgrade to Python 3.15: UTF-8 default encoding, removed APIs, sqlite3 and argparse changes, and what’s deprecated for 3.16

Python 3.15Migration

Python Type Checkers: mypy vs Pyright vs ty vs Pyrefly

mypy, Pyright, ty, and Pyrefly all check your type hints, but they differ in maturity, speed claims, and editor support — here’s how to choose

ToolsComparison

Is CPython Moving to Rust? What the Proposal Says

Python’s core team is proposing optional Rust code in CPython 3.16, starting with zlib. What’s proposed, what isn’t decided, and what it means for you

Python InternalsRust

Can You Deploy Python to Cloudflare Workers?

Cloudflare Python Workers reached general availability in September 2026 — FastAPI, Django, and Flask run natively, with real limitations worth knowing first

DeploymentExplainer

Can pnpm Manage Python Dependencies?

pnpm 12.5 added Python as a first-class ecosystem — automatic interpreter installation, managed virtual environments, and PyPI package support explained

PackagingExplainer

CrewAI vs AutoGen: Which Multi-Agent Framework

CrewAI structures agents around fixed roles and a defined process; AutoGen is built around open-ended agent conversation — here’s the real difference

AIComparison

Gradio vs Streamlit: Which to Use

Both turn a Python script into a shareable web app with no frontend code — here’s the real difference in what each is actually built for

Data ScienceComparison

GraphQL vs REST in Python

REST (via Django REST Framework) exposes fixed endpoints; GraphQL (via Strawberry) lets clients query exactly the fields they need — here’s the real trade-off

Web DevelopmentComparison

Haystack vs LangChain: Which for RAG

Haystack is built specifically for production-grade retrieval and search pipelines; LangChain is a broader framework that can also build RAG systems

AIComparison

LangChain vs LlamaIndex: What’s the Difference

LangChain is a general LLM-application framework; LlamaIndex is focused specifically on data ingestion and retrieval — here’s when each one actually fits

AIComparison

Litestar vs FastAPI: What’s the Difference

Litestar ships more batteries-included (DTOs, dependency injection conventions) while FastAPI has the larger ecosystem — here’s the real trade-off

Web DevelopmentComparison

Matplotlib vs Seaborn vs Plotly Compared

Matplotlib is the low-level foundation, Seaborn makes statistical plots simpler on top of it, and Plotly adds interactivity — here’s which to reach for

Data ScienceComparison

MLflow vs DVC: What’s the Difference

MLflow tracks experiments and manages the model lifecycle; DVC version-controls data and pipelines like Git for datasets — they solve different problems

Data ScienceComparison

NumPy vs Pandas: What’s the Difference

NumPy handles raw numerical arrays; pandas builds labeled, tabular DataFrames on top of it — here’s the real distinction beginners run into

Data ScienceComparison

NumPy vs SciPy: What’s the Difference

NumPy provides the array data structure and basic operations; SciPy builds specialized scientific algorithms on top of it — here’s how they actually relate

Data ScienceComparison

Scikit-learn vs PyTorch vs TensorFlow

Scikit-learn is for classical machine learning; PyTorch and TensorFlow are for deep learning — they’re not really competing for the same job

Data ScienceComparison

What Is Alembic? Database Migrations Explained

How Alembic tracks and applies versioned schema changes for SQLAlchemy projects, and why you need it the moment a database schema has to change

DatabasesExplainer

What Is Hugging Face?

How the Hugging Face Hub, Transformers library, and Spaces fit together, and why it’s become the default starting point for working with open models in Python

AIExplainer

What Is Loguru? Python Logging Explained

Loguru replaces the standard library’s logging setup with sensible defaults, structured output, and rotation built in from the start

ToolsExplainer

What Is MarkItDown? Docs to Markdown Explained

Microsoft’s tool for converting Office documents, PDFs, and other files into clean Markdown — and why that matters for feeding documents to an LLM

AIExplainer

What Is the OpenAI Python Library?

The official Python client for the OpenAI API — chat completions, embeddings, streaming, and function calling — and how it fits with Instructor and Pydantic AI

AIExplainer

What Is Pydantic? Python Validation Explained

How Pydantic validates and parses data using Python type hints, and why it’s become the default choice underneath FastAPI and most of the modern AI stack

ToolsExplainer

What Is Rich? Terminal Formatting Explained

How Rich turns plain terminal output into formatted tables, progress bars, and syntax-highlighted text with just a few lines of Python

ToolsExplainer

What Is Smolagents? Hugging Face’s Agent Library

A minimal, code-first agent library from Hugging Face — how it differs from heavier frameworks like LangChain, and when its simplicity is the point

AIExplainer

What Is yt-dlp?

A feature-rich command-line tool and Python library for downloading video and audio from YouTube and thousands of other sites

ToolsExplainer

CircuitPython vs MicroPython: What’s the Difference

CircuitPython is Adafruit’s beginner-friendly fork of MicroPython — here’s how the drag-and-drop workflow, hardware support, and performance actually differ

HardwareComparison

Python Async Generators Explained

How async def combined with yield actually works, when to reach for one over a regular generator or async function, and what’s changing in Python 3.16

AsyncGenerators

Python Free-Threaded Mode (No-GIL) Explained

What free-threaded Python actually is, why it’s opt-in rather than the default, and when disabling the GIL is worth trying

PerformanceConcurrency

Click vs Typer: Which Python CLI Library

Typer is built on Click and adds type-hint-driven CLIs with less boilerplate — here’s when that trade is worth it and when plain Click still wins

ToolsComparison

FastAPI vs Starlette: What’s the Difference

FastAPI is built directly on Starlette, so this isn’t really a competition — here’s what FastAPI actually adds on top, and when Starlette alone is enough

Web DevelopmentComparison

Hatch vs uv: Which One for a New Python Project

Hatch and uv both manage Python projects and environments — how they actually differ, and why most people end up using both together

PackagingComparison

httpx vs requests: Do You Need to Switch

requests is still fine for most scripts — httpx earns its place specifically with async code and HTTP/2, not as a blanket upgrade

ToolsComparison

Polars vs Pandas: Should You Switch

Polars is faster and handles bigger-than-memory data better than pandas — here’s what that actually means for a real project, and when pandas still wins

Data ScienceComparison

Python Generators Explained

Generators produce values one at a time instead of building a full list in memory — what yield actually does, and when it matters

PythonExplainer

PyTorch vs TensorFlow: Which to Learn in 2026

PyTorch won research and is closing the gap in production; TensorFlow still has the edge on mobile and legacy deployment — here’s the actual current state

Data ScienceComparison

SQLAlchemy vs Django ORM: Which One to Use

Django’s ORM is simpler and tied to Django; SQLAlchemy is more powerful and framework-independent — here’s the real trade-off, not just a feature list

Web DevelopmentComparison

What Is Celery? Python Task Queues Explained

Celery runs slow work outside the request/response cycle — here’s what it actually does, when you need it, and simpler alternatives for smaller projects

Web DevelopmentExplainer

What Is Mojo? Chris Lattner’s New AI Language Explained

Mojo combines Python syntax with systems-level performance for GPU/CPU workloads — what it actually is, now that it’s hit 1.0 and gone open source

AIExplainer

What Is Ollama? Running LLMs Locally Explained

Ollama runs open-weight LLMs on your own machine with a simple CLI and local API — what it actually does, and why you’d use it over a hosted API

AIExplainer

Instructor vs Pydantic AI: What’s the Difference

Instructor and Pydantic AI both promise structured, typed LLM output using Pydantic — here’s what actually separates a narrow tool from a full agent framework

AIPydantic

LangChain vs LangGraph: What’s Actually Different

Why LangGraph exists alongside LangChain, built by the same team, and when to reach for one over the other

AILangchain

Python AI Agent Frameworks Compared

How LangGraph, CrewAI, AutoGen, and smolagents actually differ, and which one fits a new multi-agent Python project

AIAgents

Django REST Framework Explained: Building APIs on Django

What Django REST Framework actually adds to Django, a basic serializer/viewset example, and when it’s the right choice for an API

DjangoAPI

Django REST Framework vs FastAPI: Which for a New API?

How Django REST Framework and FastAPI actually differ for building an API, and which one fits a new project vs an existing Django codebase

DjangoFastapi

Python 3.15’s JIT Compiler: How Much Faster Is It Really?

What actually changed in Python 3.15’s experimental JIT, the real speedup numbers, and whether it’s worth enabling yet

Python 3.15Performance

Python 3.15 Explained: 5 Videos Worth Watching

The best YouTube explainers covering Python 3.15’s new features, from a quick overview to hands-on looks at specific changes

Python 3.15Video

Python 3.15: What’s New

Python 3.15’s key changes — lazy imports, a new profiling package, JIT speedups, and and the other PEPs worth knowing about in the final 3.15.0 release

FeaturedPython 3.15Release Notes

What Is MCP (Model Context Protocol)? A Python Guide

What the Model Context Protocol actually standardizes, how it differs from LangChain or DSPy, and a basic FastMCP server example

FeaturedAIMCP

Ruff vs Black vs autopep8 vs yapf: Formatters Compared

Ruff vs Black, plus autopep8 and yapf: how these Python code formatters differ, and which one to pick for a new or existing project

ToolingComparison

Common Python Packages Every Developer Should Know

A short, practical list of Python packages you’ll reach for constantly — what each one does and why it’s the default choice

PackagesBeginners

DSPy Explained: Programming, Not Prompting, Language Models

What DSPy is, how it differs from hand-writing prompts, and a basic example of defining a module and letting DSPy optimize it

AILLM

FastAPI and HTMX: Interactive UIs Without a JS Framework

How FastAPI and HTMX pair together to build dynamic, interactive web apps using server-rendered HTML instead of a JavaScript frontend framework

Web FrameworksHtmx

Poetry vs uv vs Hatch: Which Python Packaging Tool in 2026

A head-to-head comparison of Poetry, uv, and Hatch — speed, lockfile behavior, and PEP 621 compliance, for picking a new project’s tooling

PackagingComparison

pytest vs unittest: Choosing a Python Testing Framework

How pytest and Python’s built-in unittest module differ, and why most teams choose pytest despite unittest requiring no installation

TestingComparison

Python Decorators Explained: What and When to Write One

How Python decorators actually work under the hood, with the built-in decorators you already use and a guide to writing your own

Language FeaturesExplainer

Python Resources for Beginners: Where to Start in 2026

The core set of resources worth starting with when you’re new to Python — courses, books, and tools, without the overwhelming full directory

FeaturedBeginnersGetting Started

The Python Standard Library: Built-In Modules Worth Knowing

The standard library modules you’ll actually reach for regularly — no pip install required, already in every Python installation

Standard LibraryBeginners

Python Virtual Environments Explained: venv vs uv vs conda

What a Python virtual environment actually is, why every project needs one, and how venv, uv, and conda differ in creating them

PackagingExplainer

requirements.txt vs pyproject.toml: What’s the Difference

Why Python packaging moved from requirements.txt to pyproject.toml, what each actually does, and whether you still need a requirements.txt file

PackagingExplainer

Streamlit Explained: Turning Python Scripts Into Web Apps

What Streamlit actually does, a basic example, and when to reach for it instead of Flask or FastAPI

Data ScienceExplainer

What Does Black Do? Python’s Code Formatter Explained

How Black formats Python code, why it’s deliberately unconfigurable, and how it differs from autopep8 and yapf

ToolingExplainer

What Is Uvicorn? The ASGI Server Behind FastAPI, Explained

Uvicorn is the ASGI server every FastAPI app runs on — how it works, and the production setup (Gunicorn workers, graceful shutdowns) most tutorials skip

Web FrameworksExplainer

The Best Python Books for Beginners in 2026

Which Python books are actually worth reading as a beginner, and the order to read them in

BooksBeginners

The Best Python IDEs and Editors in 2026

A practical comparison of the top Python IDEs and editors — what each one is best at, and how to choose

ToolsIDE

Best Python Learning Resources in 2026

A curated shortlist of the best free and paid resources for learning Python in 2026, organised by skill level and learning style

FeaturedBeginnersRoundup

The Best Python Testing Tools, Compared

pytest, unittest, and the surrounding testing ecosystem — what each tool does and when you actually need it

TestingComparison

The Best Python YouTube Channels in 2026

Which Python YouTube channels are actually worth subscribing to, organised by what you’re trying to learn

YoutubeVideo

Django vs FastAPI vs Flask: Choosing a Python Web Framework

A practical comparison of Django, FastAPI, and Flask — what each is actually good at, and how to pick the right one for your project

FeaturedComparisonWeb Frameworks

FastAPI vs Robyn vs Flask: Which Should You Choose?

A practical comparison of FastAPI, Robyn, and Flask — performance, ecosystem maturity, and which one actually fits your project

ComparisonWeb Frameworks

How to Write Clean Python Code: A Practical Guide

Concrete, non-obvious rules for writing clean, readable Python — naming, structure, and the habits that actually matter

Best PracticesClean Code

The Most Popular Python Packages in 2026 (and What They Do)

A plain-English breakdown of the Python packages with the highest download counts, and why they’re downloaded so much

FeaturedPackagesRoundup

Python Async/Await Explained (Without the Jargon)

A plain-English explanation of Python’s async/await, when it actually helps, and the mistakes that make it worse than sync code

AsyncConcurrency

The Python Learning Roadmap for 2026

A step-by-step path from zero to job-ready Python — what to learn in what order, and which resources to use at each stage

FeaturedRoadmapBeginners

Best Python Package Manager 2026: pip, Poetry, uv, Hatch

The best Python package manager for a new project in 2026, and how pip, Poetry, uv, and Hatch actually differ

FeaturedPackagingComparison

Python’s resource Module Explained

How to use Python’s built-in resource module to read and limit CPU time, memory, and file descriptors on Unix systems

Standard LibraryUnix

Python Type Hints: A Practical Guide

How to actually use Python type hints beyond the basics — generics, Optional, Protocol, and when they’re worth the effort

Type Hintsmypy

How to Find Trending Python Repos with Good First Issues

A practical method for finding active Python open source projects that are actually welcoming to first-time contributors

Open SourceGithub