Skip to main content
drawing

requires

Wheel Version py_versions Ruff

Install: pip install requires

Decorate that lets you Require/Import dependencies at runtime.

Python dependency management can be mind bottlingly complex. Optional dependencies are pretty common. Why not require the dependency at run time if a function requires said dependency?

This package has come in handy in lambda-land where you only get 250mb (on aws)!


Usage:

# This will fail
def uno():
    return json.dumps({"a": 1, "b": 2})


try:
    uno()
except NameError as ne:
    print("Error:", ne)
Error: name 'json' is not defined
# This will not fail
import requires  # Module is callable! (checkout funkify for more info -- `pip install funkify`)


@requires("json")
def uno():
    return json.dumps({"a": 1, "b": 2})


uno()
'{"a": 1, "b": 2}'
import requires


@requires("from json import dumps")
def uno():
    return dumps({"a": 1, "b": 2})


uno()
'{"a": 1, "b": 2}'
def dos():
    return dumps({"a": 1, "b": 2})


dos()
'{"a": 1, "b": 2}'
import requires


@requires(_from="json", _import="dumps")
def dos():
    return dumps({"a": 1, "b": 2})


dos()
'{"a": 1, "b": 2}'
import requires


@requires(_import="rapidjson", pip="python-rapidjson", conda_forge="python-rapidjson")
def tres():
    return rapidjson.dumps({"a": 1, "b": 2})


tres()  # Will err if not install with where to install instructions
'{"a":1,"b":2}'
# should error
def quatro():
    return path.join("a", "b")


try:
    quatro()
except NameError as ne:
    print("ERROR:", ne)
ERROR: name 'path' is not defined
from requires import Requirement

os_path_req = Requirement(_import="path", _from="os")


@os_path_req
def quatro():
    return path.join("a", "b")


assert isinstance(quatro(), str)

Enforcing requirements

import requires

try:
    import alibrary
except ModuleNotFoundError:
    requirement = requires.Requirement(
        _import="alibrary",
        pip=True,
        conda_forge="alibrary-conda-listing",
        details="Install details",
    )
try:
    requirement.raise_error()
except requires.RequirementError as err:
    print("ERROR:")
    print(err)
ERROR:
Module/Package(s) not found/installed; could not import: `import alibrary`
    pip install alibrary
    conda install -c conda-forge alibrary-conda-listing
    Install details

Less verbose version:

import requires

try:
    import alibrary
except ModuleNotFoundError:
    requires.Requirement(
        _import='alibrary',
        pip=True,
        conda_forge='alibrary-conda-listing',
        details="Install details"
    ).raise_error()

Future ideas?

  • Adding support for requiring particular package versions?
  • Auto install?
  • Allow non pip/conda/conda-forge locations?

Release files for requires 0.12.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for requires 0.12.1
File Size Uploaded
requires-0.12.1.tar.gz 8.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for requires 0.12.1
File Interpreter ABI Platform
requires-0.12.1-py3-none-any.whl Python 3 none any Details

Total release size: 18.8 kB

Release files / requires-0.12.1.tar.gz

Download URL requires-0.12.1.tar.gz
Size 8.8 kB
Tags Source
SHA-256 checksum
How to use checksums
e05a3bfbeadbf14429ce21fd2111dc36c0aca060cbe549bb6f5f010ac0bf9bb2
BLAKE2b-256 checksum
How to use checksums
9669d04c7f4b7cf7d17086dfcc711f9fe7ec7bfaafdf0011ae4a7605ce6672b6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.1

Release files / requires-0.12.1-py3-none-any.whl

Download URL requires-0.12.1-py3-none-any.whl
Size 10.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7c8734a810e362bd4fe77d112355e8f6f069b67376dbeeab6b2731f56367068c
BLAKE2b-256 checksum
How to use checksums
0a6249d256dbad857672a4b1baad7bf43c3e4e863bb720c395a9b55aaca390f6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.1

Release history Release notifications | RSS feed

This release

0.12.1 This release

2 release files

0.12.0

2 release files

0.11.1

2 release files

0.10.5

2 release files

0.10.4

2 release files

0.10.3

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page