@@ -120,7 +120,7 @@ class VenvForBenchmarks(_venv.VirtualEnvironment):
120120 @classmethod
121121 def create (cls , root = None , python = None , * ,
122122 inherit_environ = None ,
123- install = True ,
123+ upgrade = False ,
124124 ):
125125 env = _get_envvars (inherit_environ )
126126 try :
@@ -131,7 +131,7 @@ def create(cls, root=None, python=None, *,
131131 self .inherit_environ = inherit_environ
132132
133133 try :
134- self .ensure_pip ()
134+ self .ensure_pip (upgrade = upgrade )
135135 except _venv .VenvPipInstallFailedError as exc :
136136 print (f'ERROR: { exc } ' )
137137 _utils .safe_rmtree (self .root )
@@ -140,92 +140,64 @@ def create(cls, root=None, python=None, *,
140140 _utils .safe_rmtree (self .root )
141141 raise
142142
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 )
149145
150146 return self
151147
152148 @classmethod
153149 def ensure (cls , root , python = None , * ,
154- refresh = True ,
155- install = True ,
150+ upgrade = False ,
156151 ** kwargs
157152 ):
158153 if _venv .venv_exists (root ):
159154 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 )
162159 return self
163160 else :
164- return cls .create (root , python , install = install , ** kwargs )
161+ return cls .create (
162+ root ,
163+ python ,
164+ upgrade = upgrade ,
165+ ** kwargs
166+ )
165167
166168 def __init__ (self , root , * , base = None , inherit_environ = None ):
167169 super ().__init__ (root , base = base )
168170 self .inherit_environ = inherit_environ or None
169- self ._prepared = False
170171
171172 @property
172173 def _env (self ):
173174 # Restrict the env we use.
174175 return _get_envvars (self .inherit_environ )
175176
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 ():
184181 basereqs = Requirements .from_file (REQUIREMENTS_FILE , ['psutil' ])
182+ self .ensure_reqs (basereqs )
185183
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 ,
190188 env = self ._env ,
191- installer = True ,
192189 )
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
217190 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 )
225199
226200 def ensure_reqs (self , requirements = None , * , exitonerror = False ):
227- print ("Installing requirements into the virtual environment %s" % self .root )
228-
229201 # parse requirements
230202 bench = None
231203 if requirements is None :
@@ -235,20 +207,17 @@ def ensure_reqs(self, requirements=None, *, exitonerror=False):
235207 requirements = Requirements .from_benchmarks ([bench ])
236208
237209 # 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?
246217
247218 if not requirements :
248219 print ('(nothing to install)' )
249220 else :
250- self .prepare (install = bench is None )
251-
252221 # install requirements
253222 try :
254223 super ().ensure_reqs (
@@ -287,6 +256,12 @@ def cmd_venv(options, benchmarks=None):
287256 info = None
288257 exists = _venv .venv_exists (root )
289258
259+ def install (venv ):
260+ try :
261+ venv .install_pyperformance ()
262+ except _venv .RequirementsInstallationFailedError :
263+ sys .exit (1 )
264+
290265 action = options .venv_action
291266 if action == 'create' :
292267 requirements = Requirements .from_benchmarks (benchmarks )
@@ -297,6 +272,8 @@ def cmd_venv(options, benchmarks=None):
297272 info ,
298273 inherit_environ = options .inherit_environ ,
299274 )
275+ venv .ensure_pip ()
276+ install (venv )
300277 venv .ensure_reqs (requirements , exitonerror = True )
301278 if not exists :
302279 print ("The virtual environment %s has been created" % root )
@@ -313,6 +290,8 @@ def cmd_venv(options, benchmarks=None):
313290 info ,
314291 inherit_environ = options .inherit_environ ,
315292 )
293+ venv .ensure_pip ()
294+ install (venv )
316295 venv .ensure_reqs (requirements , exitonerror = True )
317296 else :
318297 print ("The virtual environment %s already exists" % root )
@@ -324,6 +303,8 @@ def cmd_venv(options, benchmarks=None):
324303 info ,
325304 inherit_environ = options .inherit_environ ,
326305 )
306+ venv .ensure_pip ()
307+ install (venv )
327308 venv .ensure_reqs (requirements , exitonerror = True )
328309 print ("The virtual environment %s has been recreated" % root )
329310 else :
@@ -332,6 +313,8 @@ def cmd_venv(options, benchmarks=None):
332313 info ,
333314 inherit_environ = options .inherit_environ ,
334315 )
316+ venv .ensure_pip ()
317+ install (venv )
335318 venv .ensure_reqs (requirements , exitonerror = True )
336319 print ("The virtual environment %s has been created" % root )
337320
0 commit comments