Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions src/pip/_internal/build_env.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ def __enter__(self):

self.save_path = os.environ.get('PATH', None)
self.save_pythonpath = os.environ.get('PYTHONPATH', None)
self.save_nousersite = os.environ.get('PYTHONNOUSERSITE', None)

install_scheme = 'nt' if (os.name == 'nt') else 'posix_prefix'
install_dirs = get_paths(install_scheme, vars={
Expand All @@ -48,20 +49,23 @@ def __enter__(self):
else:
os.environ['PYTHONPATH'] = lib_dirs

os.environ['PYTHONNOUSERSITE'] = '1'

return self.path

def __exit__(self, exc_type, exc_val, exc_tb):
if not self._no_clean:
self._temp_dir.cleanup()
if self.save_path is None:
os.environ.pop('PATH', None)
else:
os.environ['PATH'] = self.save_path

if self.save_pythonpath is None:
os.environ.pop('PYTHONPATH', None)
else:
os.environ['PYTHONPATH'] = self.save_pythonpath
def restore_var(varname, old_value):
if old_value is None:
os.environ.pop(varname, None)
else:
os.environ[varname] = old_value

restore_var('PATH', self.save_path)
restore_var('PYTHONPATH', self.save_pythonpath)
restore_var('PYTHONNOUSERSITE', self.save_nousersite)

def cleanup(self):
self._temp_dir.cleanup()
Expand Down
32 changes: 11 additions & 21 deletions src/pip/_internal/wheel.py
Original file line number Diff line number Diff line change
Expand Up @@ -625,14 +625,11 @@ def _build_one(self, req, output_dir, python_tag=None):
# Install build deps into temporary directory (PEP 518)
with req.build_env:
return self._build_one_inside_env(req, output_dir,
python_tag=python_tag,
isolate=True)
python_tag=python_tag)

def _build_one_inside_env(self, req, output_dir, python_tag=None,
isolate=False):
def _build_one_inside_env(self, req, output_dir, python_tag=None):
with TempDirectory(kind="wheel") as temp_dir:
if self.__build_one(req, temp_dir.path, python_tag=python_tag,
isolate=isolate):
if self.__build_one(req, temp_dir.path, python_tag=python_tag):
try:
wheel_name = os.listdir(temp_dir.path)[0]
wheel_path = os.path.join(output_dir, wheel_name)
Expand All @@ -647,20 +644,18 @@ def _build_one_inside_env(self, req, output_dir, python_tag=None,
self._clean_one(req)
return None

def _base_setup_args(self, req, isolate=False):
flags = '-u'
# The -S flag currently breaks Python in virtualenvs, because it relies
# on site.py to find parts of the standard library outside the env. So
# isolation is disabled for now.
# if isolate:
# flags += 'S'
def _base_setup_args(self, req):
# NOTE: Eventually, we'd want to also -S to the flags here, when we're
# isolating. Currently, it breaks Python in virtualenvs, because it
# relies on site.py to find parts of the standard library outside the
# virtualenv.
return [
sys.executable, flags, '-c',
sys.executable, '-u', '-c',
SETUPTOOLS_SHIM % req.setup_py
] + list(self.global_options)

def __build_one(self, req, tempd, python_tag=None, isolate=False):
base_args = self._base_setup_args(req, isolate=isolate)
def __build_one(self, req, tempd, python_tag=None):
base_args = self._base_setup_args(req)

spin_message = 'Running setup.py bdist_wheel for %s' % (req.name,)
with open_spinner(spin_message) as spinner:
Expand All @@ -671,13 +666,8 @@ def __build_one(self, req, tempd, python_tag=None, isolate=False):
if python_tag is not None:
wheel_args += ["--python-tag", python_tag]

env = {}
if isolate:
env['PYTHONNOUSERSITE'] = '1'

try:
call_subprocess(wheel_args, cwd=req.setup_py_dir,
extra_environ=env,
show_stdout=False, spinner=spinner)
return True
except:
Expand Down