Skip to main content

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()

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.3.tar.gz (24.8 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.3-py3-none-any.whl (31.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: python_injection-0.26.3.tar.gz
  • Upload date:
  • Size: 24.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","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.3.tar.gz
Algorithm Hash digest
SHA256 81fb5687bc4d733482747a30c0b07aeaa01da632946008f7e2e98d91fe5d6346
MD5 4b4137c796e3c1813c83b48ff3a629a1
BLAKE2b-256 6c2080554fd4ef052b199cdca26897fcb8563bfcab483aa38e37eedcd5bccf7b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: python_injection-0.26.3-py3-none-any.whl
  • Upload date:
  • Size: 31.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.32 {"installer":{"name":"uv","version":"0.11.32","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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f34bcd219701cdb67b5c2d12cc9b49e5375e22edc794c010cc7342fc58a932b2
MD5 490268960d7f1f1e95ea913946f20540
BLAKE2b-256 8c81a042e57edd76d6f72bc9b61353a376131abe85736c952d6aaec76f2fda42

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

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