Source code for wolframclient.utils.require

from __future__ import absolute_import, print_function, unicode_literals

from functools import wraps

from wolframclient.utils.api import pip


[docs] def installed_modules(): return {i.key: i.version for i in pip.get_installed_distributions()}
[docs] def missing_requirements(*modules): distributions = installed_modules() for module in modules: version = None if isinstance(module, (tuple, list)): module, version = module if module not in distributions or version and distributions[module] != version: yield version and "{}=={}".format(module, version) or module
[docs] def require_module(*modules): commands = list(missing_requirements(*modules)) if commands: print("Update in progress: pip install %s --user" % " ".join(commands)) if pip.running_under_virtualenv(): pip.main(["install", *commands]) else: pip.main(["install", "--user", *commands])
[docs] def require(*modules): def outer(func): @wraps(func) def inner(*args, **kw): require_module(*modules) return func(*args, **kw) return inner return outer