Skip to main content

Dead-simple dependency injection framework for Python.

Project description

python-injection

PyPI - Version PyPI - Downloads

Project motivations

Dependency injection in Python has long been a source of frustration.

Existing solutions are often verbose, require extensive boilerplate, or fail to leverage Python's type hints effectively. python-injection was created to solve these problems once and for all by providing a simple, elegant, and powerful dependency injection framework that feels natural to Python developers.

The goal is straightforward: make dependency injection so easy that you'll wonder how you ever managed without it.

Why choose python-injection?

  • Type-driven resolution: Dependencies are automatically resolved using Python's type annotations.
  • Decorator-based registration: Register your dependencies with simple, readable decorators.
  • Flexible lifetimes: Choose from 4 type of lifetimes to match your needs:
    • Transient: A new instance every time
    • Singleton: One instance for the entire application
    • Scoped: One instance per scope, with context manager support
    • Constant: Register pre-existing values
  • Profile support: Ability to swap certain dependencies based on a profile.
  • Pull-based instantiation: Dependencies are only created when needed, improving startup time and resource usage.
  • Full sync/async support: Works seamlessly with both synchronous and asynchronous code.

Installation

Requires Python 3.12 or higher.

pip install python-injection

Quick start

Simply apply the decorators and the package takes care of the rest.

from injection import injectable, inject, singleton

@singleton
class Printer:
    def __init__(self):
        self.history = []

    def print(self, message: str):
        self.history.append(message)
        print(message)

@injectable
class Service:
    def __init__(self, printer: Printer):
        self.printer = printer

    def hello(self):
        self.printer.print("Hello world!")

@inject
def main(service: Service):
    service.hello()

if __name__ == "__main__":
    main()

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_injection-0.26.1.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_injection-0.26.1-py3-none-any.whl (31.5 kB view details)

Uploaded Python 3

File details

Details for the file python_injection-0.26.1.tar.gz.

File metadata

  • Download URL: python_injection-0.26.1.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for python_injection-0.26.1.tar.gz
Algorithm Hash digest
SHA256 94c4fe582b27c241d33ac2e5c2518fdd54da5179f726a890e33927fa50f4c39b
MD5 f9fa2d3e35f3cf30c53abc4d3baad835
BLAKE2b-256 d6c92471d0286de290857fd04c379fcc77f68715c26c7b19f894866b02073d6e

See more details on using hashes here.

File details

Details for the file python_injection-0.26.1-py3-none-any.whl.

File metadata

  • Download URL: python_injection-0.26.1-py3-none-any.whl
  • Upload date:
  • Size: 31.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for python_injection-0.26.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2b68891a3fee3c57cbc217e1800e78c3fa8b4a7c50e0527c4503ff2779f8cb46
MD5 5859776c3e337b3a1cdfce6319637438
BLAKE2b-256 144e68be2d3ec489ba45fb9b4d834ddba95c97f6b511758db1aa0713f06e8591

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page