1
1
import codecs
2
- import importlib
3
2
import locale
4
3
import os
5
4
import platform
6
5
import struct
7
6
import subprocess
8
7
import sys
9
8
9
+ from pandas .compat ._optional import _get_version , import_optional_dependency
10
+
10
11
11
12
def get_sys_info ():
12
13
"Returns system information as a dict"
@@ -60,56 +61,54 @@ def show_versions(as_json=False):
60
61
sys_info = get_sys_info ()
61
62
62
63
deps = [
63
- # (MODULE_NAME, f(mod) -> mod version)
64
- ("pandas" , lambda mod : mod .__version__ ),
65
- ("pytest" , lambda mod : mod .__version__ ),
66
- ("pip" , lambda mod : mod .__version__ ),
67
- ("setuptools" , lambda mod : mod .__version__ ),
68
- ("Cython" , lambda mod : mod .__version__ ),
69
- ("numpy" , lambda mod : mod .version .version ),
70
- ("scipy" , lambda mod : mod .version .version ),
71
- ("pyarrow" , lambda mod : mod .__version__ ),
72
- ("xarray" , lambda mod : mod .__version__ ),
73
- ("IPython" , lambda mod : mod .__version__ ),
74
- ("sphinx" , lambda mod : mod .__version__ ),
75
- ("patsy" , lambda mod : mod .__version__ ),
76
- ("dateutil" , lambda mod : mod .__version__ ),
77
- ("pytz" , lambda mod : mod .VERSION ),
78
- ("blosc" , lambda mod : mod .__version__ ),
79
- ("bottleneck" , lambda mod : mod .__version__ ),
80
- ("tables" , lambda mod : mod .__version__ ),
81
- ("numexpr" , lambda mod : mod .__version__ ),
82
- ("feather" , lambda mod : mod .__version__ ),
83
- ("matplotlib" , lambda mod : mod .__version__ ),
84
- ("openpyxl" , lambda mod : mod .__version__ ),
85
- ("xlrd" , lambda mod : mod .__VERSION__ ),
86
- ("xlwt" , lambda mod : mod .__VERSION__ ),
87
- ("xlsxwriter" , lambda mod : mod .__version__ ),
88
- ("lxml.etree" , lambda mod : mod .__version__ ),
89
- ("bs4" , lambda mod : mod .__version__ ),
90
- ("html5lib" , lambda mod : mod .__version__ ),
91
- ("sqlalchemy" , lambda mod : mod .__version__ ),
92
- ("pymysql" , lambda mod : mod .__version__ ),
93
- ("psycopg2" , lambda mod : mod .__version__ ),
94
- ("jinja2" , lambda mod : mod .__version__ ),
95
- ("s3fs" , lambda mod : mod .__version__ ),
96
- ("fastparquet" , lambda mod : mod .__version__ ),
97
- ("pandas_gbq" , lambda mod : mod .__version__ ),
98
- ("pandas_datareader" , lambda mod : mod .__version__ ),
99
- ("gcsfs" , lambda mod : mod .__version__ ),
64
+ "pandas" ,
65
+ "pytest" ,
66
+ "pip" ,
67
+ "setuptools" ,
68
+ "Cython" ,
69
+ "numpy" ,
70
+ "scipy" ,
71
+ "pyarrow" ,
72
+ "xarray" ,
73
+ "IPython" ,
74
+ "sphinx" ,
75
+ "patsy" ,
76
+ "dateutil" ,
77
+ "pytz" ,
78
+ "blosc" ,
79
+ "bottleneck" ,
80
+ "tables" ,
81
+ "numexpr" ,
82
+ "feather" ,
83
+ "matplotlib" ,
84
+ "openpyxl" ,
85
+ "xlrd" ,
86
+ "xlwt" ,
87
+ "xlsxwriter" ,
88
+ "lxml.etree" ,
89
+ "bs4" ,
90
+ "html5lib" ,
91
+ "sqlalchemy" ,
92
+ "pymysql" ,
93
+ "psycopg2" ,
94
+ "jinja2" ,
95
+ "s3fs" ,
96
+ "fastparquet" ,
97
+ "pandas_gbq" ,
98
+ "pandas_datareader" ,
99
+ "gcsfs" ,
100
100
]
101
101
102
102
deps_blob = list ()
103
- for (modname , ver_f ) in deps :
104
- try :
105
- if modname in sys .modules :
106
- mod = sys .modules [modname ]
107
- else :
108
- mod = importlib .import_module (modname )
109
- ver = ver_f (mod )
110
- deps_blob .append ((modname , ver ))
111
- except ImportError :
112
- deps_blob .append ((modname , None ))
103
+ for modname in deps :
104
+ mod = import_optional_dependency (modname ,
105
+ raise_on_missing = False ,
106
+ on_version = "ignore" )
107
+ if mod :
108
+ ver = _get_version (mod )
109
+ else :
110
+ ver = None
111
+ deps_blob .append ((modname , ver ))
113
112
114
113
if (as_json ):
115
114
try :
@@ -126,16 +125,18 @@ def show_versions(as_json=False):
126
125
json .dump (j , f , indent = 2 )
127
126
128
127
else :
128
+ maxlen = max (len (x ) for x in deps )
129
+ tpl = '{{k:<{maxlen}}}: {{stat}}' .format (maxlen = maxlen )
129
130
130
131
print ("\n INSTALLED VERSIONS" )
131
132
print ("------------------" )
132
133
133
134
for k , stat in sys_info :
134
- print ("{k}: {stat}" .format (k = k , stat = stat ))
135
+ print (tpl .format (k = k , stat = stat ))
135
136
136
137
print ("" )
137
138
for k , stat in deps_blob :
138
- print ("{k}: {stat}" .format (k = k , stat = stat ))
139
+ print (tpl .format (k = k , stat = stat ))
139
140
140
141
141
142
def main ():
0 commit comments