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 (
10
+ VERSIONS , _get_version , import_optional_dependency )
11
+
10
12
11
13
def get_sys_info ():
12
14
"Returns system information as a dict"
@@ -58,60 +60,49 @@ def get_sys_info():
58
60
59
61
def show_versions (as_json = False ):
60
62
sys_info = get_sys_info ()
61
-
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
+ # 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" ,
100
90
]
101
91
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 ))
92
+ deps .extend (list (VERSIONS ))
93
+ deps_blob = []
113
94
114
- if (as_json ):
95
+ for modname in deps :
96
+ mod = import_optional_dependency (modname ,
97
+ raise_on_missing = False ,
98
+ on_version = "ignore" )
99
+ if mod :
100
+ ver = _get_version (mod )
101
+ else :
102
+ ver = None
103
+ deps_blob .append ((modname , ver ))
104
+
105
+ if as_json :
115
106
try :
116
107
import json
117
108
except ImportError :
@@ -126,16 +117,15 @@ def show_versions(as_json=False):
126
117
json .dump (j , f , indent = 2 )
127
118
128
119
else :
129
-
120
+ maxlen = max (len (x ) for x in deps )
121
+ tpl = '{{k:<{maxlen}}}: {{stat}}' .format (maxlen = maxlen )
130
122
print ("\n INSTALLED VERSIONS" )
131
123
print ("------------------" )
132
-
133
124
for k , stat in sys_info :
134
- print ("{k}: {stat}" .format (k = k , stat = stat ))
135
-
125
+ print (tpl .format (k = k , stat = stat ))
136
126
print ("" )
137
127
for k , stat in deps_blob :
138
- print ("{k}: {stat}" .format (k = k , stat = stat ))
128
+ print (tpl .format (k = k , stat = stat ))
139
129
140
130
141
131
def main ():
0 commit comments