55import logging
66import re
77import subprocess
8- import sys
98from email .parser import FeedParser
109from typing import Tuple
1110
@@ -97,7 +96,7 @@ def get_lambda_abi(runtime):
9796
9897
9998class PythonPipDependencyBuilder (object ):
100- def __init__ (self , runtime , osutils = None , dependency_builder = None , architecture = X86_64 ):
99+ def __init__ (self , runtime , python_exe , osutils = None , dependency_builder = None , architecture = X86_64 ):
101100 """Initialize a PythonPipDependencyBuilder.
102101
103102 :type runtime: str
@@ -122,7 +121,7 @@ def __init__(self, runtime, osutils=None, dependency_builder=None, architecture=
122121 self .osutils = OSUtils ()
123122
124123 if dependency_builder is None :
125- dependency_builder = DependencyBuilder (self .osutils , runtime , architecture = architecture )
124+ dependency_builder = DependencyBuilder (self .osutils , python_exe , runtime , architecture = architecture )
126125 self ._dependency_builder = dependency_builder
127126
128127 def build_dependencies (self , artifacts_dir_path , scratch_dir_path , requirements_path , ui = None , config = None ):
@@ -211,7 +210,7 @@ class DependencyBuilder(object):
211210 # Unlikely to hit this case.
212211 _DEFAULT_GLIBC = (2 , 17 )
213212
214- def __init__ (self , osutils , runtime , pip_runner = None , architecture = X86_64 ):
213+ def __init__ (self , osutils , runtime , python_exe , pip_runner = None , architecture = X86_64 ):
215214 """Initialize a DependencyBuilder.
216215
217216 :type osutils: :class:`lambda_builders.utils.OSUtils`
@@ -229,8 +228,9 @@ def __init__(self, osutils, runtime, pip_runner=None, architecture=X86_64):
229228 :param architecture: Architecture to build for.
230229 """
231230 self ._osutils = osutils
231+ self .python_exe = python_exe
232232 if pip_runner is None :
233- pip_runner = PipRunner (python_exe = None , pip = SubprocessPip (osutils ))
233+ pip_runner = PipRunner (python_exe = python_exe , pip = SubprocessPip (osutils ))
234234 self ._pip = pip_runner
235235 self .runtime = runtime
236236 self .architecture = architecture
@@ -364,7 +364,10 @@ def _download_all_dependencies(self, requirements_filename, directory):
364364 # which will serve as the primary list of dependencies needed to deploy
365365 # successfully.
366366 self ._pip .download_all_dependencies (requirements_filename , directory )
367- deps = {Package (directory , filename ) for filename in self ._osutils .get_directory_contents (directory )}
367+ deps = {
368+ Package (directory , filename , self .python_exe )
369+ for filename in self ._osutils .get_directory_contents (directory )
370+ }
368371 LOG .debug ("Full dependency closure: %s" , deps )
369372 return deps
370373
@@ -383,7 +386,7 @@ def _build_sdists(self, sdists, directory, compile_c=True):
383386
384387 def _categorize_wheel_files (self , directory ):
385388 final_wheels = [
386- Package (directory , filename )
389+ Package (directory , filename , self . python_exe )
387390 for filename in self ._osutils .get_directory_contents (directory )
388391 if filename .endswith (".whl" )
389392 ]
@@ -506,13 +509,14 @@ def _install_wheels(self, src_dir, dst_dir, wheels):
506509class Package (object ):
507510 """A class to represent a package downloaded but not yet installed."""
508511
509- def __init__ (self , directory , filename , osutils = None ):
512+ def __init__ (self , directory , filename , python_exe , osutils = None ):
510513 self .dist_type = "wheel" if filename .endswith (".whl" ) else "sdist"
511514 self ._directory = directory
512515 self .filename = filename
513516 if osutils is None :
514517 osutils = OSUtils ()
515518 self ._osutils = osutils
519+ self .python_exe = python_exe
516520 self ._name , self ._version = self ._calculate_name_and_version ()
517521
518522 @property
@@ -553,7 +557,7 @@ def _calculate_name_and_version(self):
553557 # {platform tag}.whl
554558 name , version = self .filename .split ("-" )[:2 ]
555559 else :
556- info_fetcher = SDistMetadataFetcher (osutils = self ._osutils )
560+ info_fetcher = SDistMetadataFetcher (self . python_exe , osutils = self ._osutils )
557561 sdist_path = self ._osutils .joinpath (self ._directory , self .filename )
558562 name , version = info_fetcher .get_package_name_and_version (sdist_path )
559563 normalized_name = self ._normalize_name (name )
@@ -572,10 +576,11 @@ class SDistMetadataFetcher(object):
572576 "exec(compile(code, __file__, 'exec'))"
573577 )
574578
575- def __init__ (self , osutils = None ):
579+ def __init__ (self , python_exe , osutils = None ):
576580 if osutils is None :
577581 osutils = OSUtils ()
578582 self ._osutils = osutils
583+ self .python_exe = python_exe
579584
580585 def _parse_pkg_info_file (self , filepath ):
581586 # The PKG-INFO generated by the egg-info command is in an email feed
@@ -590,7 +595,7 @@ def _get_pkg_info_filepath(self, package_dir):
590595 setup_py = self ._osutils .joinpath (package_dir , "setup.py" )
591596 script = self ._SETUPTOOLS_SHIM % setup_py
592597
593- cmd = [sys . executable , "-c" , script , "--no-user-cfg" , "egg_info" , "--egg-base" , "egg-info" ]
598+ cmd = [self . python_exe , "-c" , script , "--no-user-cfg" , "egg_info" , "--egg-base" , "egg-info" ]
594599 egg_info_dir = self ._osutils .joinpath (package_dir , "egg-info" )
595600 self ._osutils .makedirs (egg_info_dir )
596601 p = subprocess .Popen (
0 commit comments