2626ZIPFILE_NAME = 'lambda_function.zip'
2727
2828
29- def build_package (path , requirements ):
30- pkg = Package (path )
29+ def build_package (path , requirements , virtualenv = None ):
30+ pkg = Package (path , virtualenv )
3131
3232 pkg .clean_workspace ()
3333 pkg .clean_zipfile ()
3434 pkg .prepare_workspace ()
35- pkg .install_requirements (requirements )
35+ if virtualenv :
36+ if not os .path .isdir (virtualenv ):
37+ raise Exception ("supplied virtualenv %s not found" % virtualenv )
38+ LOG .info ("Using existing virtualenv found in %s" % virtualenv )
39+ else :
40+ LOG .info ('Building new virtualenv and installing requirements' )
41+ pkg .prepare_virtualenv ()
42+ pkg .install_requirements (requirements )
3643 pkg .package ()
3744 return pkg
3845
3946
4047class Package (object ):
41- def __init__ (self , path ):
48+ def __init__ (self , path , virtualenv = None ):
4249 self ._path = path
4350 self ._temp_workspace = os .path .join (path ,
4451 TEMP_WORKSPACE_NAME )
4552 self .zip_file = os .path .join (path , ZIPFILE_NAME )
4653
47- self ._pkg_venv = os .path .join (self ._temp_workspace , 'venv' )
48- self ._venv_pip = 'bin/pip'
49- if sys .platform == 'win32' or sys .platform == 'cygwin' :
50- self ._venv_pip = 'Scripts\pip.exe'
54+ if virtualenv :
55+ self ._pkg_venv = virtualenv
56+ else :
57+ self ._pkg_venv = os .path .join (self ._temp_workspace , 'venv' )
58+ self ._venv_pip = 'bin/pip'
59+ if sys .platform == 'win32' or sys .platform == 'cygwin' :
60+ self ._venv_pip = 'Scripts\pip.exe'
5161
5262 def clean_workspace (self ):
5363 if os .path .isdir (self ._temp_workspace ):
@@ -61,6 +71,7 @@ def prepare_workspace(self):
6171 # Setup temporary workspace
6272 os .mkdir (self ._temp_workspace )
6373
74+ def prepare_virtualenv (self ):
6475 proc = Popen (["virtualenv" , self ._pkg_venv ], stdout = PIPE , stderr = PIPE )
6576 stdout , stderr = proc .communicate ()
6677 LOG .debug ("Virtualenv stdout: %s" % stdout )
0 commit comments