Skip to content

Commit ffa3bea

Browse files
author
y-p
committed
BLD: ci/print_versions.py learned to output json
Contortions due to lack of OrderedDict in 2.6 Should be runnable indep. from pandas.compat being available Avoid duplicating the OD polyfill here as well. Oh well.
1 parent 1ebb31e commit ffa3bea

File tree

2 files changed

+94
-157
lines changed

2 files changed

+94
-157
lines changed

ci/print_versions.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
#!/usr/bin/env python
22

33

4-
def show_versions():
4+
5+
def show_versions(as_json=False):
56
import imp
67
import os
78
fn = __file__
89
this_dir = os.path.dirname(fn)
910
pandas_dir = os.path.abspath(os.path.join(this_dir,".."))
1011
sv_path = os.path.join(pandas_dir, 'pandas','util')
1112
mod = imp.load_module('pvmod', *imp.find_module('print_versions', [sv_path]))
12-
return mod.show_versions()
13+
return mod.show_versions(as_json)
1314

1415

1516
if __name__ == '__main__':
16-
show_versions()
17+
# optparse is 2.6-safe
18+
from optparse import OptionParser
19+
parser = OptionParser()
20+
parser.add_option("-j", "--json", action="store_true", help="Format output as JSON")
21+
22+
(options, args) = parser.parse_args()
23+
24+
show_versions(as_json=options.json)

pandas/util/print_versions.py

+83-154
Original file line numberDiff line numberDiff line change
@@ -1,167 +1,96 @@
11
import os
22
import platform
33
import sys
4+
import struct
45

6+
def get_sys_info():
7+
"Returns system information as a dict"
58

6-
def show_versions():
7-
print("\nINSTALLED VERSIONS")
8-
print("------------------")
9-
print("Python: %d.%d.%d.%s.%s" % sys.version_info[:])
10-
9+
# list of tuples over dict because OrderedDict not in 2.6, least
10+
# resistance.
11+
blob = []
1112
try:
1213
sysname, nodename, release, version, machine, processor = platform.uname()
13-
print("OS: %s" % (sysname))
14-
print("Release: %s" % (release))
15-
#print("Version: %s" % (version))
16-
#print("Machine: %s" % (machine))
17-
print("Processor: %s" % (processor))
18-
print("byteorder: %s" % sys.byteorder)
19-
print("LC_ALL: %s" % os.environ.get('LC_ALL', "None"))
20-
print("LANG: %s" % os.environ.get('LANG', "None"))
14+
blob = [
15+
("python", "%d.%d.%d.%s.%s" % sys.version_info[:]),
16+
("python-bits", struct.calcsize("P") * 8),
17+
("OS","%s" % (sysname)),
18+
("OS-release", "%s" % (release)),
19+
# ("Version", "%s" % (version)),
20+
# ("Machine", "%s" % (machine)),
21+
("processor", "%s" % (processor)),
22+
("byteorder", "%s" % sys.byteorder),
23+
("LC_ALL", "%s" % os.environ.get('LC_ALL', "None")),
24+
("LANG", "%s" % os.environ.get('LANG', "None")),
25+
26+
]
2127
except:
2228
pass
2329

24-
print("")
25-
26-
try:
27-
import pandas
28-
print("pandas: %s" % pandas.__version__)
29-
except:
30-
print("pandas: Not installed")
31-
32-
try:
33-
import Cython
34-
print("Cython: %s" % Cython.__version__)
35-
except:
36-
print("Cython: Not installed")
37-
38-
try:
39-
import numpy
40-
print("Numpy: %s" % numpy.version.version)
41-
except:
42-
print("Numpy: Not installed")
43-
44-
try:
45-
import scipy
46-
print("Scipy: %s" % scipy.version.version)
47-
except:
48-
print("Scipy: Not installed")
49-
50-
try:
51-
import statsmodels
52-
print("statsmodels: %s" % statsmodels.__version__)
53-
except:
54-
print("statsmodels: Not installed")
55-
try:
56-
import patsy
57-
print(" patsy: %s" % patsy.__version__)
58-
except:
59-
print(" patsy: Not installed")
60-
61-
try:
62-
import scikits.timeseries as ts
63-
print("scikits.timeseries: %s" % ts.__version__)
64-
except:
65-
print("scikits.timeseries: Not installed")
66-
67-
try:
68-
import dateutil
69-
print("dateutil: %s" % dateutil.__version__)
70-
except:
71-
print("dateutil: Not installed")
72-
73-
try:
74-
import pytz
75-
print("pytz: %s" % pytz.VERSION)
76-
except:
77-
print("pytz: Not installed")
78-
79-
try:
80-
import bottleneck
81-
print("bottleneck: %s" % bottleneck.__version__)
82-
except:
83-
print("bottleneck: Not installed")
84-
85-
try:
86-
import tables
87-
print("PyTables: %s" % tables.__version__)
88-
except:
89-
print("PyTables: Not Installed")
90-
91-
try:
92-
import numexpr
93-
print(" numexpr: %s" % numexpr.__version__)
94-
except:
95-
print(" numexpr: Not Installed")
96-
97-
try:
98-
import matplotlib
99-
print("matplotlib: %s" % matplotlib.__version__)
100-
except:
101-
print("matplotlib: Not installed")
102-
103-
try:
104-
import openpyxl
105-
print("openpyxl: %s" % openpyxl.__version__)
106-
except:
107-
print("openpyxl: Not installed")
108-
109-
try:
110-
import xlrd
111-
print("xlrd: %s" % xlrd.__VERSION__)
112-
except:
113-
print("xlrd: Not installed")
114-
115-
try:
116-
import xlwt
117-
print("xlwt: %s" % xlwt.__VERSION__)
118-
except:
119-
print("xlwt: Not installed")
120-
121-
try:
122-
import xlsxwriter
123-
print("xlsxwriter: %s" % xlsxwriter.__version__)
124-
except:
125-
print("xlsxwriter: Not installed")
126-
127-
try:
128-
import sqlalchemy
129-
print("sqlalchemy: %s" % sqlalchemy.__version__)
130-
except:
131-
print("sqlalchemy: Not installed")
132-
133-
try:
134-
import lxml
135-
from lxml import etree
136-
print("lxml: %s" % etree.__version__)
137-
except:
138-
print("lxml: Not installed")
139-
140-
try:
141-
import bs4
142-
print("bs4: %s" % bs4.__version__)
143-
except:
144-
print("bs4: Not installed")
145-
146-
try:
147-
import html5lib
148-
print("html5lib: %s" % html5lib.__version__)
149-
except:
150-
print("html5lib: Not installed")
151-
152-
try:
153-
import bq
154-
print("bigquery: %s" % bq._VersionNumber())
155-
except:
156-
print("bigquery: Not installed")
157-
158-
try:
159-
import apiclient
160-
print("apiclient: %s" % apiclient.__version__)
161-
except:
162-
print("apiclient: Not installed")
163-
30+
return blob
31+
32+
33+
def show_versions(as_json=False):
34+
import imp
35+
sys_info = get_sys_info()
36+
37+
deps = [
38+
# (MODULE_NAME, f(mod) -> mod version)
39+
("pandas", lambda mod: mod.__version__),
40+
("Cython", lambda mod: mod.__version__),
41+
("numpy", lambda mod: mod.version.version),
42+
("scipy", lambda mod: mod.version.version),
43+
("statsmodels", lambda mod: mod.__version__),
44+
("patsy", lambda mod: mod.__version__),
45+
("scikits.timeseries", lambda mod: mod.__version__),
46+
("dateutil", lambda mod: mod.__version__),
47+
("pytz", lambda mod: mod.VERSION),
48+
("bottleneck", lambda mod: mod.__version__),
49+
("tables", lambda mod: mod.__version__),
50+
("numexpr", lambda mod: mod.__version__),
51+
("matplotlib", lambda mod: mod.__version__),
52+
("openpyxl", lambda mod: mod.__version__),
53+
("xlrd", lambda mod: mod.__VERSION__),
54+
("xlwt", lambda mod: mod.__VERSION__),
55+
("xlsxwriter", lambda mod: mod.__version__),
56+
("sqlalchemy", lambda mod: mod.__version__),
57+
("lxml", lambda mod: mod.etree.__version__),
58+
("bs4", lambda mod: mod.__version__),
59+
("html5lib", lambda mod: mod.__version__),
60+
("bq", lambda mod: mod._VersionNumber()),
61+
("apiclient", lambda mod: mod.__version__),
62+
]
63+
64+
deps_blob = list()
65+
for (modname, ver_f) in deps:
66+
try:
67+
mod = imp.load_module(modname, *imp.find_module(modname))
68+
ver = ver_f(mod)
69+
deps_blob.append((modname, ver))
70+
except:
71+
deps_blob.append((modname, None))
72+
73+
if (as_json):
74+
# 2.6-safe
75+
try:
76+
import json
77+
except:
78+
import simplejson as json
79+
80+
print(json.dumps(dict(system=dict(sys_info), dependencies=dict(deps_blob)), indent=2))
81+
82+
else:
83+
84+
print("\nINSTALLED VERSIONS")
85+
print("------------------")
86+
87+
for k, stat in sys_info:
88+
print("%s: %s" % (k, stat))
89+
90+
print("")
91+
for k, stat in deps_blob:
92+
print("%s: %s" % (k, stat))
16493

16594

16695
if __name__ == "__main__":
167-
show_versions()
96+
show_versions(as_json=False)

0 commit comments

Comments
 (0)