python-injection
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()
Metadata
Release files for python-injection 0.26.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| python_injection-0.26.4.tar.gz | 24.9 kB | Without provenance | Details for python_injection-0.26.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| python_injection-0.26.4-py3-none-any.whl | Python 3 | none | any | Details for python_injection-0.26.4-py3-none-any.whl |
Total release size: 56.6 kB
Release files / python_injection-0.26.4.tar.gz
| Download URL | python_injection-0.26.4.tar.gz |
|---|---|
| Size | 24.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0a273b3e6014e056a687778b2e81dc6225f2e5aa4ce82f599b11a3c213ed50b7
|
|
BLAKE2b-256 checksum How to use checksums |
ff29defa140111342d6c25df014b2ffc5f6b35a0dd0755f7ebccb1c8cfe21d5b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Release files / python_injection-0.26.4-py3-none-any.whl
| Download URL | python_injection-0.26.4-py3-none-any.whl |
|---|---|
| Size | 31.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7b866d654070badac8a6b0c3b3fc973338e97eb23bf79667924118dc420ea8c3
|
|
BLAKE2b-256 checksum How to use checksums |
258769d237a20e401d83fdb1961a236ce7ae98c9cb2d1661c43a35e73de870b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.4 {"installer":{"name":"uv","version":"0.13.4","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}
|
Security for python-injection 0.26.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.