Python Academy · Lesson

Packages and __init__.py

Organize modules into packages with proper directory structure.

Lesson 3 of 413 steps

Packages and __init__.py is a free Python Academy lesson on CoddyKit. This is lesson 3 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Python Academy learning path, and your progress syncs across the web and the CoddyKit app. The Python Academy course includes 4 lessons in total.

What Is a Package?

A package is a directory that contains an __init__.py file and one or more modules. Python treats any such directory as a package you can import from.

mypackage/
    __init__.py
    utils.py
    math_helpers.py

The __init__.py File

__init__.py runs when the package is imported. It can be empty or expose selected names to callers.

# mypackage/__init__.py
from .utils import helper
from .math_helpers import add

Importing from a Package

Use dot-notation to import submodules or names defined in __init__.py.

import mypackage
from mypackage import helper
from mypackage.math_helpers import add
print(add(2, 3))

Subpackages

Packages can nest: a subdirectory with its own __init__.py becomes a subpackage.

mypackage/
    __init__.py
    network/
        __init__.py
        http.py

Relative Imports

Inside a package, use relative imports with a leading dot to reference sibling modules without hard-coding the package name.

# mypackage/network/http.py
from ..utils import helper   # two levels up

Absolute vs Relative Imports

Absolute imports are unambiguous and preferred. Relative imports are useful inside large packages to avoid long names.

# Absolute
from mypackage.utils import helper

# Relative (inside mypackage)
from .utils import helper

__all__ in __init__.py

Define __all__ to control what from package import * exports.

# mypackage/__init__.py
__all__ = ['helper', 'add']
from .utils import helper
from .math_helpers import add

Namespace Packages (PEP 420)

Python 3.3+ supports namespace packages — directories without __init__.py. Useful for splitting a package across multiple directories.

# No __init__.py needed
# Just have the directory and import normally
import myns.module

Package __init__ Initialization

Use __init__.py to set package-level constants, configure logging, or lazily load heavy submodules.

# mypackage/__init__.py
import logging
logging.getLogger(__name__).addHandler(logging.NullHandler())
VERSION = '1.0.0'

Distributing Packages

Add a pyproject.toml or setup.py to make your package installable with pip.

# pyproject.toml excerpt
[project]
name = "mypackage"
version = "1.0.0"

# Install locally
# pip install -e .

Inspecting Package Attributes

Use __file__, __path__, and __name__ to introspect package metadata at runtime.

import mypackage
print(mypackage.__file__)   # path to __init__.py
print(mypackage.__path__)   # list of directory paths
print(mypackage.__name__)   # 'mypackage'

Quick Check

Which file makes a directory a Python package?

Recap

Packages organize modules into directories using __init__.py. Use absolute imports for clarity, relative imports within a package, and __all__ to control public APIs.

Free to start

Learn Python with an AI tutor — free

Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.

Courses
76
Lessons
320

Frequently Asked Questions

Is the “Packages and __init__.py” lesson free?

Yes — the full text of “Packages and __init__.py” is free to read here on the web. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Python Academy course, upgrade to CoddyKit PRO. The Python Academy course includes 4 lessons in total.

What will I learn in “Packages and __init__.py”?

Organize modules into packages with proper directory structure. You practise Python Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start Python Academy?

No prior experience is required. Python Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 3 of 4.

How long does the “Packages and __init__.py” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this Python Academy lesson?

Yes. Every Python Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. Creating and Importing Modules
  2. The Python Standard Library
  3. Packages and __init__.py
  4. Installing Packages with pip
← Back to Python Academy