Skip to main content

Pyproject.toml: The Ultimate Guide to Python Packaging in 2026

· 5 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

For years, the Python packaging world was a Wild West of setup.py, setup.cfg, and requirements.txt. It was messy, often insecure, and required executing arbitrary Python code just to install a library.

In 2026, pyproject.toml is the undisputed king. It is a single, human-readable configuration file that tells Python exactly how to build, install, and manage your project.

The `__main__.py` File: The Front Door to Your Python Package

· 5 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

If __init__.py is the receptionist that organizes your package, then __main__.py is the front door. It's the specific file Python looks for when you try to execute a directory as if it were a single script.

In 2026, as Python applications become more modular, __main__.py has become the standard way to provide a Command Line Interface (CLI) for your tools.

How to Use `__init__.py` Like a Pro in 2026: Best Practices for Python Packages

· 5 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

While the existence of __init__.py makes a directory a package, how you fill that file separates a messy script from a professional library. In 2026, the goal of a well-crafted __init__.py is to provide a "Clean Facade"-hiding the messy internal plumbing of your project while offering a polished interface to the user.

Here are the industry-standard best practices for utilizing this file effectively.

The `__init__.py` File: The Real Hero of Python Packages

· 5 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

If you've ever peeked into a professional Python project, you've probably seen these little "empty" files scattered in almost every folder. To the uninitiated, __init__.py looks like a mistake or a placeholder.

In reality, it is the "Receptionist" of your Python package. It tells Python, "This directory isn't just a random folder of files; it is a structured module that you can import."

Conventional Commits Cheat Sheet 2026

· 6 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

Conventional Commits is a lightweight convention on top of commit messages. It provides an easy set of rules for creating an explicit commit history, which makes it easier for automated tools to parse and for humans to understand (1).

How to enforce type hinting in Python: Static vs Runtime Strategies

· 5 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

Python is famous for being a "consenting adults" language. By default, type hints (like name: str) are just polite suggestions. If you pass an integer into a function expecting a string, Python will happily execute it-and probably crash three lines later.

In 2026, relying on "polite suggestions" isn't enough for production-grade code. To actually enforce type hinting, you have to move beyond the built-in typing module and use external guardians.

How to Fix the 'ModuleNotFoundError: No module named pre_commit' Error

· 5 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

Getting the ModuleNotFoundError: No module named 'pre_commit' error is a classic "Lost in Translation" moment between your terminal and your Python environment. You know you want to commit code, and Git knows it needs to run a hook, but the Python interpreter looking for the pre_commit package is coming up empty-handed.

Here is the straightforward guide to finding that missing module and getting your hooks back on track.

How to read and resolve Git merge conflicts without losing your mind?

· 6 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

The dreaded CONFLICT (content): Merge conflict in file.txt. For many developers, seeing this message triggers an immediate spike in heart rate. It feels like you broke something.

Take a deep breath. You didn't break anything. A merge conflict is simply Git throwing its hands up and saying, "Hey, two people changed the exact same line of code, and I am not smart enough to guess which one is right. I need a human."

Here is how to read the Matrix, resolve the conflict, and get on with your day without losing your mind.

How to use `git worktree list` to see all your linked branches and folders

· 5 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

If you've started using Git Worktrees to juggle multiple branches at once, your file system can quickly become a bit of a maze. You might forget which folder is tracking which feature, or worse, why Git won't let you delete a branch because it's "in use" somewhere you can't find.

git worktree list is your GPS. It tells you exactly how your main repository is linked to various folders on your machine.

How to write RLS Policies to ensure users can only edit their own profile data?

· 5 min read
Serhii Hrekov
software engineer, creator, artist, programmer, projects founder

In a traditional setup, you'd write a bunch of backend code to check if session.user.id === profile.id. In Supabase, you just tell the database the rules and let it act as the bouncer.

Row Level Security (RLS) is the engine that ensures your users can see a thousand profiles but can only click "Edit" on their own. Here is how to configure it correctly in 2026.

Looking for more content?
Hrekov Blog contains 275 articles. Browse the blog archive or Explore the full timeline.