Coverage for /home/martinb/.local/share/virtualenvs/camcops/lib/python3.6/site-packages/pandas/util/_print_versions.py : 22%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import codecs
2import json
3import locale
4import os
5import platform
6import struct
7import subprocess
8import sys
9from typing import List, Optional, Tuple, Union
11from pandas.compat._optional import VERSIONS, _get_version, import_optional_dependency
14def get_sys_info() -> List[Tuple[str, Optional[Union[str, int]]]]:
15 """
16 Returns system information as a list
17 """
18 blob: List[Tuple[str, Optional[Union[str, int]]]] = []
20 # get full commit hash
21 commit = None
22 if os.path.isdir(".git") and os.path.isdir("pandas"):
23 try:
24 pipe = subprocess.Popen(
25 'git log --format="%H" -n 1'.split(" "),
26 stdout=subprocess.PIPE,
27 stderr=subprocess.PIPE,
28 )
29 so, serr = pipe.communicate()
30 except (OSError, ValueError):
31 pass
32 else:
33 if pipe.returncode == 0:
34 commit = so.decode("utf-8").strip().strip('"')
36 blob.append(("commit", commit))
38 try:
39 (sysname, nodename, release, version, machine, processor) = platform.uname()
40 blob.extend(
41 [
42 ("python", ".".join(map(str, sys.version_info))),
43 ("python-bits", struct.calcsize("P") * 8),
44 ("OS", f"{sysname}"),
45 ("OS-release", f"{release}"),
46 # ("Version", "{version}".format(version=version)),
47 ("machine", f"{machine}"),
48 ("processor", f"{processor}"),
49 ("byteorder", f"{sys.byteorder}"),
50 ("LC_ALL", f"{os.environ.get('LC_ALL', 'None')}"),
51 ("LANG", f"{os.environ.get('LANG', 'None')}"),
52 ("LOCALE", ".".join(map(str, locale.getlocale()))),
53 ]
54 )
55 except (KeyError, ValueError):
56 pass
58 return blob
61def show_versions(as_json=False):
62 sys_info = get_sys_info()
63 deps = [
64 "pandas",
65 # required
66 "numpy",
67 "pytz",
68 "dateutil",
69 # install / build,
70 "pip",
71 "setuptools",
72 "Cython",
73 # test
74 "pytest",
75 "hypothesis",
76 # docs
77 "sphinx",
78 # Other, need a min version
79 "blosc",
80 "feather",
81 "xlsxwriter",
82 "lxml.etree",
83 "html5lib",
84 "pymysql",
85 "psycopg2",
86 "jinja2",
87 # Other, not imported.
88 "IPython",
89 "pandas_datareader",
90 ]
92 deps.extend(list(VERSIONS))
93 deps_blob = []
95 for modname in deps:
96 mod = import_optional_dependency(
97 modname, raise_on_missing=False, on_version="ignore"
98 )
99 ver: Optional[str]
100 if mod:
101 ver = _get_version(mod)
102 else:
103 ver = None
104 deps_blob.append((modname, ver))
106 if as_json:
107 j = dict(system=dict(sys_info), dependencies=dict(deps_blob))
109 if as_json is True:
110 print(j)
111 else:
112 with codecs.open(as_json, "wb", encoding="utf8") as f:
113 json.dump(j, f, indent=2)
115 else:
116 maxlen = max(len(x) for x in deps)
117 tpl = "{{k:<{maxlen}}}: {{stat}}".format(maxlen=maxlen)
118 print("\nINSTALLED VERSIONS")
119 print("------------------")
120 for k, stat in sys_info:
121 print(tpl.format(k=k, stat=stat))
122 print("")
123 for k, stat in deps_blob:
124 print(tpl.format(k=k, stat=stat))
127def main() -> int:
128 from optparse import OptionParser
130 parser = OptionParser()
131 parser.add_option(
132 "-j",
133 "--json",
134 metavar="FILE",
135 nargs=1,
136 help="Save output as JSON into file, pass in '-' to output to stdout",
137 )
139 (options, args) = parser.parse_args()
141 if options.json == "-":
142 options.json = True
144 show_versions(as_json=options.json)
146 return 0
149if __name__ == "__main__":
150 sys.exit(main())