Source code for wolframclient.utils.require

# -*- coding: utf-8 -*-

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 not module in distributions or version and not distributions[module] == version: yield version and "%s==%s" % (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