Skip to main content
Blog & Guides

Python Obfuscation, Explained

Honest, hands-on guides to protecting Python code — every technique tested for real, with before/after examples and the free tools to do it yourself.

Obfuscation

How to Deobfuscate Python Code (4 Real Methods)

Deobfuscate Python online, in your browser: unpack exec/base64/zlib, re-indent mangled code, disassemble marshal/.pyc blobs, and pull hidden strings. Free tools, tested.

8 min readRead guide
Guides

How to Open a .ipynb File (Without Jupyter)

Six ways to open a Jupyter .ipynb file: an online viewer (no install), VS Code, GitHub, JupyterLab, nbconvert, or plain Python. Tested — what each gives.

7 min readRead guide
Guides

How to Convert a cURL Command to Python (requests)

Convert any cURL command to Python requests — headers, JSON, auth, params, files. A tested flag-by-flag map, plus an online converter. Proven equivalent.

8 min readRead guide
Reverse Engineering

How to Reverse Marshal-Obfuscated Python (3 Tested Methods)

Decrypt an exec(marshal.loads(...)) Python loader back to its logic and source — three tested methods, including capturing the code object without running it. Marshal is encoding, not encryption.

8 min readRead guide
Guides

Free-Threaded Python (No-GIL) in 3.14: What It Means, Tested

Python 3.14 makes the free-threaded (no-GIL) build officially supported. I benchmarked it — 4 threads went from 0.98x to 3.91x. What it is, how to get it, and the trade-offs.

8 min readRead guide
Guides

Compressing Python Bytecode: zlib vs zstd (Tested)

Should you compress marshaled Python bytecode with zlib or Python 3.14's new zstd? I marshaled real modules and measured both — real sizes, the crossover, and the 3.14-only catch.

7 min readRead guide
Guides

Python t-strings (PEP 750): A Tested, Practical Guide

Python 3.14's t-strings (PEP 750), explained with tested examples: how they differ from f-strings, the Template/Interpolation API, and how they stop SQL injection and XSS.

8 min readRead guide
Guides

Python to EXE: The Best Converters Compared (2026)

PyInstaller vs Nuitka vs cx_Freeze vs py2exe vs auto-py-to-exe — the best Python-to-EXE converters compared by output, protection and ease, including py-to-exe without PyInstaller.

9 min readRead guide
Guides

Run Python Online With Libraries (pip, numpy, pandas) — No Install

Yes, you can run Python online with libraries — pip-install numpy, pandas, requests and 300+ more, even in the browser. How package support works online, tested, and its limits.

8 min readRead guide
Guides

The Best Online Python Compilers in 2026 (Compared)

Compared: the best online Python compilers in 2026 — Colab, Replit, Programiz, OnlineGDB and in-browser (Pyodide) runners — by Python version, pip support, privacy and login.

9 min readRead guide
Guides

How to Run a Jupyter Notebook Online (Free, No Install)

Run, view, convert or clean a Jupyter notebook online — free, no install. Full interactive kernels (Colab, JupyterLite) plus lightweight browser tools, compared and tested.

9 min readRead guide
Reverse Engineering

Can You Decompile a Python 3.14 `.pyc`? (Tested)

I tested pycdc, uncompyle6 and the stdlib on a real Python 3.14 .pyc. Full decompilers fail with "Bad MAGIC", but marshal + dis still recover the strings and logic.

7 min readRead guide
Guides

Python Code Beautifier: Prettify Code and Pretty-Print Data (Tested)

"Beautify Python" means two things. I tested both: reformatting code with Black vs autopep8, and pretty-printing dicts/JSON with pprint vs json.dumps. Real output.

8 min readRead guide
Reverse Engineering

Can PyArmor Be Deobfuscated? An Honest, Tested Answer

Is there a PyArmor deobfuscator? I tested the standard decompiler toolkit against PyArmor output — it fails. Here is the honest picture of what is and isn’t reversible.

9 min readRead guide
Guides

Python Static Code Analysis: 5 Tools Tested on One Buggy File

I ran Ruff, Pylint, Flake8, Bandit and mypy on the same 30-line buggy Python file. Real output, what each caught, and which static analysis tools to actually use.

11 min readRead guide
Guides

What Is PyArmor? How It Works, Pricing, and Free Alternatives (Tested)

What PyArmor is, how it obfuscates Python (tested on a real build), 2026 pricing (Basic $52 / Pro $89), the free trial limits, and honest free alternatives.

10 min readRead guide
Obfuscation

Python `marshal` Explained: Bytecode Loaders and Why They’re Weak Protection

What Python marshal does, how to build a marshaled bytecode loader (with optional zlib compression and -O/-OO), why it’s version-locked (3.10–3.14), and why it is weak protection. Tested.

9 min readRead guide
Reverse Engineering

How to Decompile a PyInstaller EXE Back to Python (Tested)

I built a real PyInstaller .exe, then unpacked it with pyinstxtractor and decompiled it back to source. Every step, real commands and output, 2026.

9 min readRead guide
Guides

ty vs mypy vs Pyright: Which Python Type Checker Should You Use in 2026?

We ran ty 0.0.72, mypy 2.3.1 and Pyright 1.1.413 on the same Python 3.14 fixtures. Compare diagnostics, strictness, speed and fit.

9 min readRead guide
Guides

Ruff vs Pylint: Which Python Linter Should You Use in 2026?

We ran Ruff 0.16.3 and Pylint 4.0.7 on the same 14 lint cases. Compare errors caught, auto-fixes, speed, plugins and the best setup.

10 min readRead guide
Guides

Python Obfuscator vs Compiler vs Packager: What's the Difference?

PyInstaller, Cython, Nuitka, PyArmor — obfuscator vs compiler vs packager, explained with real artifacts. Different jobs: hide, compile, or just bundle. Which to use, and how to combine them.

8 min readRead guide
Obfuscation

Python Obfuscation vs Encryption: What's the Difference?

Python obfuscation vs encryption: obfuscation makes code hard to read but still runnable; encryption makes data unreadable until decrypted with a key. Why encryption alone can't protect executable logic — tested.

7 min readRead guide
Reverse Engineering

Can Python Code Be Decompiled? What You Actually Need to Know

Can Python code be decompiled? Yes — .py is plain source, .pyc decompiles and leaks strings, even .pyd/.so can be disassembled. What each format really exposes, tested.

8 min readRead guide
Reverse Engineering

Can Python .pyc Files Be Decompiled? A Complete Guide

Can .pyc files be decompiled? Yes — I tested it across Python 3.8–3.14. What's recoverable (logic, strings), what's lost (comments), how version affects it, and how to protect .pyc.

9 min readRead guide
Reverse Engineering

Does PyInstaller Protect Python Source Code? The Truth About Python EXE Files

Does PyInstaller protect your source code? No — I built a real exe and extracted the .pyc back out with pyinstxtractor. PyInstaller is packaging, not protection. Here's the proof and the fix.

7 min readRead guide
Guides

PyArmor vs Nuitka vs Cython vs Pyobfuscate: Python Code Protection Compared (Tested)

I ran all four on the same script: PyArmor, Nuitka, Cython and Pyobfuscate. Real output sizes, which hide the secret, speed, and which to use — a tested Python code protection comparison.

10 min readRead guide
Reverse Engineering

How to Disassemble Python Bytecode (with the dis Module)

Disassemble Python bytecode with the dis module — read opcodes, code objects and jumps, see how it changes per version, and why .pyc isn't protection. Tested.

8 min readRead guide
Guides

How to Check Python with Ruff Online (ruff check, Tested)

Check Ruff online, free: paste Python and run ruff check in your browser. I ran Ruff 0.16.2 on a messy file — 8 errors, 5 auto-fixable. Real output + how-to.

7 min readRead guide
Obfuscation

Junk-Code Injection in Python: Does Adding Noise Actually Help?

Junk-code (dead-code) injection buries Python logic in realistic-looking noise. Real before/after from our obfuscator — a 194-char function became 4,451 chars of plausible junk that still runs.

6 min readRead guide
Obfuscation

Variable & Function Renaming: Python Obfuscation's First Layer

Identifier renaming is Python obfuscation's cheapest, irreversible layer. Real before/after from our obfuscator: label/total become noise, the code runs the same, the names are gone for good.

5 min readRead guide
Obfuscation

Control-Flow Flattening in Python: How It Works (Real Example)

How control-flow flattening obfuscates Python: it rewrites if/else and loops into one while-loop state machine. Real before/after from our obfuscator — same output, unreadable flow.

6 min readRead guide
Obfuscation

Compile Python to .pyd / .so with Cython (Tested): Faster & Harder to Reverse

Compile Python to a native .pyd/.so with Cython — no .py or .pyc to decompile. I built a real module: 56× faster and a 35 KB binary. Honest limits (strings still leak) too.

8 min readRead guide
Guides

How to Minify Python Code (Tested Size Reductions)

Minify Python to shrink file size — strip comments/whitespace or rename identifiers. Tested reductions, behavior preserved, and why it isn't protection.

6 min readRead guide
Guides

How to Convert Python 2 to Python 3 (2to3, Tested)

Convert Python 2 to 3 the right way: what 2to3 fixes automatically (tested diff), what it can't (text vs bytes), and an online converter — no install.

6 min readRead guide
Guides

How to Modernize Python Type Hints (PEP 585 & 604)

Modernize Python type hints: typing.List → list (PEP 585) and Optional[X] → X | None (PEP 604). Tested equivalences, version caveat, and an online tool.

6 min readRead guide
Guides

How to Format Python Code Online (Black, autopep8, YAPF)

Format Python online with Black, autopep8, or YAPF — no install. See the same messy code cleaned three ways (tested) and which formatter to pick.

6 min readRead guide
Guides

How to Convert Python to EXE Online (The Honest Way)

Convert Python to an .exe online: why a browser can't truly compile one, and the real no-install path — generate the command, spec & a cloud build. Tested.

6 min readRead guide
Guides

How to Protect API Keys in a Python Script (What Actually Works)

I hard-coded an API key, then tried every common way to hide it — base64, config.py, XOR, obfuscation. Here's what leaks, what actually works, and why.

9 min readRead guide
Reverse Engineering

How to Decompile a Python `.pyc` File: Every Method, Tested

The 3 ways to decompile a Python .pyc — online decompiler, CLI tools (uncompyle6/pycdc), and stdlib marshal+dis. Tested across Python 3.8–3.14.

10 min readRead guide
Obfuscation

Python Minification vs Obfuscation: What's the Difference?

Minifying shrinks a Python file; obfuscating protects it. I tested both on one script — sizes, whether the secret survives, and whether it still runs.

8 min readRead guide
Guides

Reading a Python AST: A Practical Guide

How to read and transform Python code with the ast module — parse, dump, walk, NodeVisitor, and ast.unparse. Real, runnable examples on Python 3.14.

9 min readRead guide
Guides

How to Convert a Jupyter Notebook to a Python Script

Three ways to turn a .ipynb into a .py — nbconvert, a no-install browser tool, and a few lines of stdlib. Tested: what each does to magics and outputs.

7 min readRead guide
Obfuscation

Is Python Obfuscation Secure? I Tried to Break 5 Common Methods

I obfuscated one Python script five common ways, then reverse-engineered each. base64, zlib, marshal, layering, minifier — here is how fast every method fell.

10 min readRead guide
Guides

Ruff Format vs Black: Is It Really a Drop-in Replacement?

I formatted 124 real files with both Ruff and Black — 86% came out byte-identical, and ruff format ran 29× faster. Is it a drop-in Black replacement? Real tests.

8 min readRead guide
Guides

Ruff vs Flake8 and Black: I Replaced Both and Benchmarked It

Ruff replaces Flake8, isort and Black in one Rust tool. I benchmarked it: 53× faster than Flake8 on 1,677 files. Real lint + format tests, honest caveats.

8 min readRead guide
Guides

uv: The Fast Python Package Manager That Replaces pip, venv, pyenv and pipx

uv replaces pip, virtualenv, pyenv and pipx in one Rust binary. I benchmarked it on Python 3.14: 31x faster installs than pip. Real tests, honest tradeoffs.

10 min readRead guide
Guides

Generative AI Is Infrastructure Now: How to Architect GenAI Into Your Python Backend

Architect generative AI into a Python backend: FastAPI streaming, a semantic vector cache, and a pgvector schema — with real latency numbers I measured.

11 min readRead guide
Guides

LangGraph vs Pydantic AI: Which Agent Framework Should You Use in 2026?

LangGraph vs Pydantic AI in 2026. I built the same agent in both and measured install size, lines of code, and durability. Real numbers, honest verdict.

9 min readRead guide
Guides

charset-normalizer: Detect Text Encoding in Python (With Real Tests)

How to detect a file's text encoding in Python with charset-normalizer — plus a no-install stdlib fallback. I ran both against 33 real samples across 7 encodings. Here are the numbers.

8 min readRead guide
Guides

How to Run Python in Your Browser (No Install, 2026)

Run Python online with no install — real examples: execute a script, pip-install numpy, and test Python 3.13 features in the browser. Client-side vs server-side compilers explained.

8 min readRead guide
Obfuscation

Python String Encryption: 4 Ways to Hide Strings (Tested)

Python string encryption, tested. base64, XOR, Fernet and AST obfuscation — what actually hides a string in your code, what’s trivially reversible, and the limit you can’t code around.

9 min readRead guide
Guides

How to Protect Python Source Code (2026 Practical Guide)

How to protect Python source code, ranked from weakest to strongest — with a real test showing where minification, .pyc, obfuscation and native compilation actually stand.

11 min readRead guide
Reverse Engineering

Python Bytecode Explained (with Real dis Output)

What is Python bytecode? A clear, tested explainer — how source compiles to a code object, real dis output, what a .pyc holds, magic numbers, and why bytecode isn’t protection.

9 min readRead guide
Guides

Convert Python to EXE: A Real PyInstaller Walk-Through

How to convert a Python script to a .exe — I built a real one with PyInstaller. The exact command, onefile vs onedir sizes, the cross-compile catch, and why an .exe isn’t protection.

9 min readRead guide
Guides

autopep8 vs Black: I Formatted the Same Messy File With Both

autopep8 vs Black, tested. I ran both on the same messy Python file — real before/after output, quotes, line length, and which one to actually use.

8 min readRead guide
Reverse Engineering

How to Decompile a Python `.pyc` File (and Why `.pyc` Isn’t Protection)

Can you decompile a Python .pyc file back to source? I tested it — strings leak, the bytecode is readable, and it runs without the .py. Here’s exactly what works.

9 min readRead guide
Obfuscation

How to Obfuscate Python Code: The 2026 Complete Guide

A step-by-step guide to obfuscating Python code in 2026 — from weak base64 tricks to AST-level renaming, string encryption and compilation. Real, tested examples.

9 min readRead guide
Obfuscation

Python Obfuscation Explained: How to Protect Your Source Code in 2026

A complete 2026 guide to Python obfuscation and code protection — how it works, tested examples, bytecode, decompilers, tools, and mistakes to avoid.

12 min readRead guide