Source code for statsmodels.tools.print_version

#!/usr/bin/env python
"""Print installed dependency versions for diagnostics"""

from functools import reduce
import os
from pathlib import Path
import platform
import sys


def safe_version(module, attr="__version__", *others):
    """
    Return a version attribute from a module, or a fallback message

    Parameters
    ----------
    module : module
        The imported module to inspect.
    attr : str or list[str]
        Name of the attribute (or chain of nested attribute names) to
        look up on ``module``, e.g. ``"__version__"`` or
        ``["version", "version"]``.
    *others : str
        Additional attribute names to try, in order, if ``attr`` is not
        found on ``module``.

    Returns
    -------
    str
        The value of the located version attribute, or
        ``"Cannot detect version"`` if none of the attributes exist.
    """
    if not isinstance(attr, list):
        attr = [attr]
    try:
        return reduce(getattr, [module, *attr])
    except AttributeError:
        if others:
            return safe_version(module, others[0], *others[1:])
        return "Cannot detect version"


def _show_versions_only():
    print("\nINSTALLED VERSIONS")
    print("------------------")
    print("Python: {:d}.{:d}.{:d}.{}.{}".format(*sys.version_info[:]))

    import os

    sysname, nodename, release, version, machine = os.uname()
    print(f"OS: {sysname} {release} {version} {machine}")
    print(f"byteorder: {sys.byteorder}")
    print("LC_ALL: {}".format(os.environ.get("LC_ALL", "None")))
    print("LANG: {}".format(os.environ.get("LANG", "None")))
    try:
        import statsmodels

        has_sm = True
    except ImportError:
        has_sm = False

    print("\nstatsmodels\n===========\n")
    if has_sm:
        print(f"Installed: {safe_version(statsmodels)}")
    else:
        print("Not installed")

    print("\nRequired Dependencies\n=====================\n")
    try:
        import Cython

        print(f"cython: {safe_version(Cython)}")
    except ImportError:
        print("cython: Not installed")

    try:
        import numpy as np

        print(f"numpy: {safe_version(np)}")
    except ImportError:
        print("numpy: Not installed")

    try:
        import scipy

        print(f"scipy: {safe_version(scipy)}")
    except ImportError:
        print("scipy: Not installed")

    try:
        import pandas as pd

        print(f"pandas: {safe_version(pd)}")
    except ImportError:
        print("pandas: Not installed")

    try:
        import dateutil

        print(f"    dateutil: {safe_version(dateutil)}")
    except ImportError:
        print("    dateutil: not installed")

    try:
        import patsy

        print(f"patsy: {safe_version(patsy)}")
    except ImportError:
        print("patsy: Not installed")

    try:
        import formulaic

        print(f"formulaic: {safe_version(formulaic)}")
    except ImportError:
        print("formulaic: Not installed")

    print("\nOptional Dependencies\n=====================\n")

    try:
        import matplotlib as mpl

        print(f"matplotlib: {safe_version(mpl)}")
    except ImportError:
        print("matplotlib: Not installed")

    try:
        from cvxopt import info

        print("cvxopt: {}".format(safe_version(info, "version")))
    except ImportError:
        print("cvxopt: Not installed")

    try:
        import joblib

        print(f"joblib: {safe_version(joblib)} ")
    except ImportError:
        print("joblib: Not installed")

    print("\nDeveloper Tools\n================\n")

    try:
        import IPython

        print(f"IPython: {safe_version(IPython)}")
    except ImportError:
        print("IPython: Not installed")
    try:
        import jinja2

        print(f"    jinja2: {safe_version(jinja2)}")
    except ImportError:
        print("    jinja2: Not installed")

    try:
        import sphinx

        print(f"sphinx: {safe_version(sphinx)}")
    except ImportError:
        print("sphinx: Not installed")

    try:
        import pygments

        print(f"    pygments: {safe_version(pygments)}")
    except ImportError:
        print("    pygments: Not installed")

    try:
        import pytest

        print(f"pytest: {safe_version(pytest)} ({Path(pytest.__file__).parent})")
    except ImportError:
        print("pytest: Not installed")

    try:
        import virtualenv

        print(f"virtualenv: {safe_version(virtualenv)}")
    except ImportError:
        print("virtualenv: Not installed")

    print("\n")


[docs] def show_versions(show_dirs=True): """ List the versions of statsmodels and any installed dependencies Parameters ---------- show_dirs : bool Flag indicating to show module locations """ if not show_dirs: _show_versions_only() print("\nINSTALLED VERSIONS") print("------------------") print("Python: {:d}.{:d}.{:d}.{}.{}".format(*sys.version_info[:])) uname = platform.uname() sysname = uname.system release = uname.release version = uname.version machine = uname.machine print(f"OS: {sysname} {release} {version} {machine}") print(f"byteorder: {sys.byteorder}") print("LC_ALL: {}".format(os.environ.get("LC_ALL", "None"))) print("LANG: {}".format(os.environ.get("LANG", "None"))) try: import statsmodels has_sm = True except ImportError: has_sm = False print("\nstatsmodels\n===========\n") if has_sm: print( f"Installed: {safe_version(statsmodels)} ({Path(statsmodels.__file__).parent})" ) else: print("Not installed") print("\nRequired Dependencies\n=====================\n") try: import Cython print(f"cython: {safe_version(Cython)} ({Path(Cython.__file__).parent})") except ImportError: print("cython: Not installed") try: import numpy as np print(f"numpy: {safe_version(np)} ({Path(np.__file__).parent})") except ImportError: print("numpy: Not installed") try: import scipy print(f"scipy: {safe_version(scipy)} ({Path(scipy.__file__).parent})") except ImportError: print("scipy: Not installed") try: import pandas as pd print( "pandas: {} ({})".format( safe_version(pd, "__version__"), Path(pd.__file__).parent, ) ) except ImportError: print("pandas: Not installed") try: import dateutil print( f" dateutil: {safe_version(dateutil)} ({Path(dateutil.__file__).parent})" ) except ImportError: print(" dateutil: not installed") try: import patsy print(f"patsy: {safe_version(patsy)} ({Path(patsy.__file__).parent})") except ImportError: print("patsy: Not installed") print("\nOptional Dependencies\n=====================\n") try: import matplotlib as mpl print(f"matplotlib: {safe_version(mpl)} ({Path(mpl.__file__).parent})") print(" backend: {} ".format(mpl.rcParams["backend"])) except ImportError: print("matplotlib: Not installed") try: from cvxopt import info print( "cvxopt: {} ({})".format( safe_version(info, "version"), Path(info.__file__).parent ) ) except ImportError: print("cvxopt: Not installed") try: import joblib print(f"joblib: {safe_version(joblib)} ({Path(joblib.__file__).parent})") except ImportError: print("joblib: Not installed") print("\nDeveloper Tools\n================\n") try: import IPython print(f"IPython: {safe_version(IPython)} ({Path(IPython.__file__).parent})") except ImportError: print("IPython: Not installed") try: import jinja2 print(f" jinja2: {safe_version(jinja2)} ({Path(jinja2.__file__).parent})") except ImportError: print(" jinja2: Not installed") try: import sphinx print(f"sphinx: {safe_version(sphinx)} ({Path(sphinx.__file__).parent})") except ImportError: print("sphinx: Not installed") try: import pygments print( f" pygments: {safe_version(pygments)} ({Path(pygments.__file__).parent})" ) except ImportError: print(" pygments: Not installed") try: import pytest print(f"pytest: {safe_version(pytest)} ({Path(pytest.__file__).parent})") except ImportError: print("pytest: Not installed") try: import virtualenv print(f"virtualenv: {safe_version(virtualenv)} ({Path(virtualenv.__file__).parent})") except ImportError: print("virtualenv: Not installed") print("\n")
if __name__ == "__main__": show_versions()