43
43
import shutil
44
44
import site
45
45
import subprocess
46
- import sys
47
46
import tempfile
47
+ import importlib
48
+ import sys
49
+
50
+
51
+ def pip_package (name = None ):
52
+ def decorator (func ):
53
+ def wrapper (* args , ** kwargs ):
54
+ _name = name if name else func .__name__
55
+ try :
56
+ importlib .import_module (_name )
57
+ del sys .modules [_name ]
58
+ except ImportError :
59
+ print ("Installing required dependency: {}" .format (_name ))
60
+ func (* args , ** kwargs )
61
+ return wrapper
62
+ return decorator
63
+
48
64
49
65
def system (cmd , msg = "" ):
50
66
print ("+" , cmd )
@@ -54,6 +70,7 @@ def system(cmd, msg=""):
54
70
55
71
56
72
def known_packages ():
73
+ @pip_package ()
57
74
def pytest (** kwargs ):
58
75
wcwidth (** kwargs )
59
76
importlib_metadata (** kwargs )
@@ -125,9 +142,11 @@ def _importtestmodule(self):
125
142
"""
126
143
install_from_pypi ("pytest==5.0.1" , patch = patch , ** kwargs )
127
144
145
+ @pip_package ()
128
146
def py (** kwargs ):
129
147
install_from_pypi ("py==1.8.0" , ** kwargs )
130
148
149
+ @pip_package ()
131
150
def attrs (** kwargs ):
132
151
patch = """
133
152
--- a/setup.py
@@ -143,17 +162,21 @@ def attrs(**kwargs):
143
162
"""
144
163
install_from_pypi ("attrs==19.1.0" , patch = patch , ** kwargs )
145
164
165
+ @pip_package ()
146
166
def pyparsing (** kwargs ):
147
167
install_from_pypi ("pyparsing==2.4.2" , ** kwargs )
148
168
169
+ @pip_package ()
149
170
def packaging (** kwargs ):
150
171
six (** kwargs )
151
172
pyparsing (** kwargs )
152
173
install_from_pypi ("packaging==19.0" , ** kwargs )
153
174
175
+ @pip_package ()
154
176
def more_itertools (** kwargs ):
155
177
install_from_pypi ("more-itertools==7.0.0" , ** kwargs )
156
178
179
+ @pip_package ()
157
180
def atomicwrites (** kwargs ):
158
181
patch = """
159
182
--- a/setup.py
@@ -171,65 +194,80 @@ def atomicwrites(**kwargs):
171
194
"""
172
195
install_from_pypi ("atomicwrites==1.3.0" , patch = patch , ** kwargs )
173
196
197
+ @pip_package ()
174
198
def pluggy (** kwargs ):
175
199
zipp (** kwargs )
176
200
install_from_pypi ("pluggy==0.12.0" , ** kwargs )
177
201
202
+ @pip_package ()
178
203
def zipp (** kwargs ):
179
204
setuptools_scm (** kwargs )
180
205
install_from_pypi ("zipp==0.5.0" , ** kwargs )
181
206
207
+ @pip_package ()
182
208
def importlib_metadata (** kwargs ):
183
209
zipp (** kwargs )
184
210
install_from_pypi ("importlib-metadata==0.19" , ** kwargs )
185
211
212
+ @pip_package ()
186
213
def wcwidth (** kwargs ):
214
+ six (** kwargs )
187
215
install_from_pypi ("wcwidth==0.1.7" , ** kwargs )
188
216
217
+ @pip_package ()
189
218
def PyYAML (** kwargs ):
190
219
install_from_pypi ("PyYAML==3.13" , ** kwargs )
191
220
221
+ @pip_package ()
192
222
def six (** kwargs ):
193
223
install_from_pypi ("six==1.12.0" , ** kwargs )
194
224
225
+ @pip_package ()
195
226
def Cython (** kwargs ):
196
227
install_from_pypi ("Cython==0.29.2" , ** kwargs )
197
228
229
+ @pip_package ()
198
230
def setuptools (** kwargs ):
199
- try :
200
- import six as _six
201
- except ImportError :
202
- print ("Installing required dependency: six" )
203
- six (** kwargs )
231
+ six (** kwargs )
204
232
install_from_pypi ("setuptools==41.0.1" , ** kwargs )
205
233
234
+ @pip_package ()
206
235
def pkgconfig (** kwargs ):
207
236
install_from_pypi ("pkgconfig==1.5.1" , ** kwargs )
208
237
238
+ @pip_package ()
209
239
def wheel (** kwargs ):
210
240
install_from_pypi ("wheel==0.33.4" , ** kwargs )
211
241
242
+ @pip_package ()
212
243
def protobuf (** kwargs ):
213
244
install_from_pypi ("protobuf==3.8.0" , ** kwargs )
214
245
246
+ @pip_package ()
215
247
def Keras_preprocessing (** kwargs ):
216
248
install_from_pypi ("Keras-Preprocessing==1.0.5" , ** kwargs )
217
249
250
+ @pip_package ()
218
251
def gast (** kwargs ):
219
252
install_from_pypi ("gast==0.2.2" , ** kwargs )
220
253
254
+ @pip_package ()
221
255
def astor (** kwargs ):
222
256
install_from_pypi ("astor==0.8.0" , ** kwargs )
223
257
258
+ @pip_package ()
224
259
def absl_py (** kwargs ):
225
260
install_from_pypi ("absl-py==0.7.1" , ** kwargs )
226
261
262
+ @pip_package ()
227
263
def mock (** kwargs ):
228
264
install_from_pypi ("mock==3.0.5" , ** kwargs )
229
265
266
+ @pip_package ()
230
267
def Markdown (** kwargs ):
231
268
install_from_pypi ("Markdown==3.1.1" , ** kwargs )
232
269
270
+ @pip_package ()
233
271
def Werkzeug (** kwargs ):
234
272
install_from_pypi ("Werkzeug==0.15.4" , ** kwargs )
235
273
@@ -256,16 +294,13 @@ def Werkzeug(**kwargs):
256
294
# h5py(**kwargs)
257
295
# install_from_pypi("Keras-Applications==1.0.6", **kwargs)
258
296
297
+ @pip_package ()
259
298
def setuptools_scm (** kwargs ):
260
299
install_from_pypi ("setuptools_scm==1.15.0" , ** kwargs )
261
300
301
+ @pip_package ()
262
302
def numpy (** kwargs ):
263
- try :
264
- import setuptools as st
265
- except ImportError :
266
- print ("Installing required dependency: setuptools" )
267
- setuptools (** kwargs )
268
-
303
+ setuptools (** kwargs )
269
304
patch = r'''
270
305
diff --git a/numpy/__init__.py b/numpy/__init__.py
271
306
index ba88c73..e4db404 100644
@@ -1092,44 +1127,21 @@ def get_lapack_lite_sources(ext, build_dir):
1092
1127
'''
1093
1128
install_from_pypi ("numpy==1.16.4" , patch = patch , env = {"NPY_NUM_BUILD_JOBS" : "1" })
1094
1129
1095
-
1130
+ @ pip_package ()
1096
1131
def dateutil (** kwargs ):
1097
- try :
1098
- import setuptools_scm as st_scm
1099
- except ImportError :
1100
- print ("Installing required dependency: setuptools_scm" )
1101
- setuptools_scm (** kwargs )
1132
+ setuptools_scm (** kwargs )
1102
1133
install_from_pypi ("python-dateutil==2.7.5" , ** kwargs )
1103
1134
1104
-
1135
+ @ pip_package ()
1105
1136
def pytz (** kwargs ):
1106
1137
install_from_pypi ("pytz==2018.7" , ** kwargs )
1107
1138
1108
-
1139
+ @ pip_package ()
1109
1140
def pandas (** kwargs ):
1110
- try :
1111
- import pytz as _dummy_pytz
1112
- except ImportError :
1113
- print ("Installing required dependency: pytz" )
1114
- pytz (** kwargs )
1115
-
1116
- try :
1117
- import six as _dummy_six
1118
- except ImportError :
1119
- print ("Installing required dependency: six" )
1120
- six (** kwargs )
1121
-
1122
- try :
1123
- import dateutil as __dummy_dateutil
1124
- except ImportError :
1125
- print ("Installing required dependency: dateutil" )
1126
- dateutil (** kwargs )
1127
-
1128
- try :
1129
- import numpy as np
1130
- except ImportError :
1131
- print ("Installing required dependency: numpy" )
1132
- numpy (** kwargs )
1141
+ pytz (** kwargs )
1142
+ six (** kwargs )
1143
+ dateutil (** kwargs )
1144
+ numpy (** kwargs )
1133
1145
1134
1146
# download pandas-0.25.0
1135
1147
patch = r'''diff --git a/pandas/io/msgpack/_packer.cpp b/pandas/io/msgpack/_packer.cpp
@@ -1386,6 +1398,5 @@ def main(argv):
1386
1398
install_from_pypi (pkg , ignore_errors = False )
1387
1399
1388
1400
1389
-
1390
1401
if __name__ == "__main__" :
1391
1402
main (sys .argv [1 :])
0 commit comments