@@ -120,7 +120,7 @@ class VenvForBenchmarks(_venv.VirtualEnvironment):
120
120
@classmethod
121
121
def create (cls , root = None , python = None , * ,
122
122
inherit_environ = None ,
123
- install = True ,
123
+ upgrade = False ,
124
124
):
125
125
env = _get_envvars (inherit_environ )
126
126
try :
@@ -131,7 +131,7 @@ def create(cls, root=None, python=None, *,
131
131
self .inherit_environ = inherit_environ
132
132
133
133
try :
134
- self .ensure_pip ()
134
+ self .ensure_pip (upgrade = upgrade )
135
135
except _venv .VenvPipInstallFailedError as exc :
136
136
print (f'ERROR: { exc } ' )
137
137
_utils .safe_rmtree (self .root )
@@ -140,92 +140,64 @@ def create(cls, root=None, python=None, *,
140
140
_utils .safe_rmtree (self .root )
141
141
raise
142
142
143
- try :
144
- self .prepare (install )
145
- except BaseException :
146
- print ()
147
- _utils .safe_rmtree (venv .root )
148
- raise
143
+ # Display the pip version
144
+ _pip .run_pip ('--version' , python = self .python , env = self ._env )
149
145
150
146
return self
151
147
152
148
@classmethod
153
149
def ensure (cls , root , python = None , * ,
154
- refresh = True ,
155
- install = True ,
150
+ upgrade = False ,
156
151
** kwargs
157
152
):
158
153
if _venv .venv_exists (root ):
159
154
self = super ().ensure (root )
160
- if refresh :
161
- self .prepare (install )
155
+ if upgrade :
156
+ self .upgrade_pip ()
157
+ else :
158
+ self .ensure_pip (upgrade = False )
162
159
return self
163
160
else :
164
- return cls .create (root , python , install = install , ** kwargs )
161
+ return cls .create (
162
+ root ,
163
+ python ,
164
+ upgrade = upgrade ,
165
+ ** kwargs
166
+ )
165
167
166
168
def __init__ (self , root , * , base = None , inherit_environ = None ):
167
169
super ().__init__ (root , base = base )
168
170
self .inherit_environ = inherit_environ or None
169
- self ._prepared = False
170
171
171
172
@property
172
173
def _env (self ):
173
174
# Restrict the env we use.
174
175
return _get_envvars (self .inherit_environ )
175
176
176
- def prepare (self , install = True ):
177
- print ("Installing the virtual environment %s" % self .root )
178
- if self ._prepared or (self ._prepared is None and not install ):
179
- print ('(already installed)' )
180
- return
181
-
182
- if not self ._prepared :
183
- # parse requirements
177
+ def install_pyperformance (self ):
178
+ print ("installing pyperformance in the venv at %s" % self .root )
179
+ # Install pyperformance inside the virtual environment.
180
+ if pyperformance .is_dev ():
184
181
basereqs = Requirements .from_file (REQUIREMENTS_FILE , ['psutil' ])
182
+ self .ensure_reqs (basereqs )
185
183
186
- # Upgrade pip
187
- ec , _ , _ = _pip .upgrade_pip (
188
- self . python ,
189
- info = self .info ,
184
+ root_dir = os . path . dirname ( pyperformance . PKG_ROOT )
185
+ ec , _ , _ = _pip .install_editable (
186
+ root_dir ,
187
+ python = self .info ,
190
188
env = self ._env ,
191
- installer = True ,
192
189
)
193
- if ec != 0 :
194
- sys .exit (ec )
195
-
196
- # XXX not for benchmark venvs
197
- if install :
198
- # install pyperformance inside the virtual environment
199
- # XXX This isn't right...
200
- if pyperformance .is_installed ():
201
- root_dir = os .path .dirname (pyperformance .PKG_ROOT )
202
- ec , _ , _ = _pip .install_editable (
203
- root_dir ,
204
- python = self .info ,
205
- env = self ._env ,
206
- )
207
- else :
208
- version = pyperformance .__version__
209
- ec , _ , _ = _pip .install_requirements (
210
- f'pyperformance=={ version } ' ,
211
- python = self .info ,
212
- env = self ._env ,
213
- )
214
- if ec != 0 :
215
- sys .exit (ec )
216
- self ._prepared = True
217
190
else :
218
- self ._prepared = None
219
-
220
- # Display the pip version
221
- _pip .run_pip ('--version' , python = self .python , env = self ._env )
222
-
223
- # Dump the package list and their versions: pip freeze
224
- _pip .run_pip ('freeze' , python = self .python , env = self ._env )
191
+ version = pyperformance .__version__
192
+ ec , _ , _ = _pip .install_requirements (
193
+ f'pyperformance=={ version } ' ,
194
+ python = self .info ,
195
+ env = self ._env ,
196
+ )
197
+ if ec != 0 :
198
+ sys .exit (ec )
225
199
226
200
def ensure_reqs (self , requirements = None , * , exitonerror = False ):
227
- print ("Installing requirements into the virtual environment %s" % self .root )
228
-
229
201
# parse requirements
230
202
bench = None
231
203
if requirements is None :
@@ -235,20 +207,17 @@ def ensure_reqs(self, requirements=None, *, exitonerror=False):
235
207
requirements = Requirements .from_benchmarks ([bench ])
236
208
237
209
# Every benchmark must depend on pyperf.
238
- if requirements and bench is not None :
239
- if not requirements .get ('pyperf' ):
240
- basereqs = Requirements .from_file (REQUIREMENTS_FILE , ['psutil' ])
241
- pyperf_req = basereqs .get ('pyperf' )
242
- if not pyperf_req :
243
- raise NotImplementedError
244
- requirements .specs .append (pyperf_req )
245
- # XXX what about psutil?
210
+ if bench is not None and not requirements .get ('pyperf' ):
211
+ basereqs = Requirements .from_file (REQUIREMENTS_FILE , ['psutil' ])
212
+ pyperf_req = basereqs .get ('pyperf' )
213
+ if not pyperf_req :
214
+ raise NotImplementedError
215
+ requirements .specs .append (pyperf_req )
216
+ # XXX what about psutil?
246
217
247
218
if not requirements :
248
219
print ('(nothing to install)' )
249
220
else :
250
- self .prepare (install = bench is None )
251
-
252
221
# install requirements
253
222
try :
254
223
super ().ensure_reqs (
@@ -287,6 +256,12 @@ def cmd_venv(options, benchmarks=None):
287
256
info = None
288
257
exists = _venv .venv_exists (root )
289
258
259
+ def install (venv ):
260
+ try :
261
+ venv .install_pyperformance ()
262
+ except _venv .RequirementsInstallationFailedError :
263
+ sys .exit (1 )
264
+
290
265
action = options .venv_action
291
266
if action == 'create' :
292
267
requirements = Requirements .from_benchmarks (benchmarks )
@@ -297,6 +272,8 @@ def cmd_venv(options, benchmarks=None):
297
272
info ,
298
273
inherit_environ = options .inherit_environ ,
299
274
)
275
+ venv .ensure_pip ()
276
+ install (venv )
300
277
venv .ensure_reqs (requirements , exitonerror = True )
301
278
if not exists :
302
279
print ("The virtual environment %s has been created" % root )
@@ -313,6 +290,8 @@ def cmd_venv(options, benchmarks=None):
313
290
info ,
314
291
inherit_environ = options .inherit_environ ,
315
292
)
293
+ venv .ensure_pip ()
294
+ install (venv )
316
295
venv .ensure_reqs (requirements , exitonerror = True )
317
296
else :
318
297
print ("The virtual environment %s already exists" % root )
@@ -324,6 +303,8 @@ def cmd_venv(options, benchmarks=None):
324
303
info ,
325
304
inherit_environ = options .inherit_environ ,
326
305
)
306
+ venv .ensure_pip ()
307
+ install (venv )
327
308
venv .ensure_reqs (requirements , exitonerror = True )
328
309
print ("The virtual environment %s has been recreated" % root )
329
310
else :
@@ -332,6 +313,8 @@ def cmd_venv(options, benchmarks=None):
332
313
info ,
333
314
inherit_environ = options .inherit_environ ,
334
315
)
316
+ venv .ensure_pip ()
317
+ install (venv )
335
318
venv .ensure_reqs (requirements , exitonerror = True )
336
319
print ("The virtual environment %s has been created" % root )
337
320
0 commit comments