requires 0.10.5

Creator: railscoder56

Last updated:

Add to Cart

Description:

requires 0.10.5

requires




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?

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.