From 470d48ad6e4209c76dd3b9eab2112b85377d17a0 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 23 Jan 2018 02:53:56 +0530 Subject: Move BuildEnvironment out of wheel.py --- src/pip/_internal/build_env.py | 60 ++++++++++++++++++++++++++++++++++++++++++ src/pip/_internal/wheel.py | 54 +------------------------------------ 2 files changed, 61 insertions(+), 53 deletions(-) create mode 100644 src/pip/_internal/build_env.py (limited to 'src') diff --git a/src/pip/_internal/build_env.py b/src/pip/_internal/build_env.py new file mode 100644 index 000000000..4ae1c4d9f --- /dev/null +++ b/src/pip/_internal/build_env.py @@ -0,0 +1,60 @@ +"""Build Environment used for isolation during sdist building +""" + +import os +from sysconfig import get_paths + +from pip._internal.utils.temp_dir import TempDirectory + + +class BuildEnvironment(object): + """Manages a temporary environment to install build deps + """ + + def __init__(self, no_clean): + self._temp_dir = TempDirectory(kind="build-env") + self._no_clean = no_clean + + def __enter__(self): + self._temp_dir.create() + + self.save_path = os.environ.get('PATH', None) + self.save_pythonpath = os.environ.get('PYTHONPATH', None) + + install_scheme = 'nt' if (os.name == 'nt') else 'posix_prefix' + install_dirs = get_paths(install_scheme, vars={ + 'base': self._temp_dir.path, + 'platbase': self._temp_dir.path, + }) + + scripts = install_dirs['scripts'] + if self.save_path: + os.environ['PATH'] = scripts + os.pathsep + self.save_path + else: + os.environ['PATH'] = scripts + os.pathsep + os.defpath + + if install_dirs['purelib'] == install_dirs['platlib']: + lib_dirs = install_dirs['purelib'] + else: + lib_dirs = install_dirs['purelib'] + os.pathsep + \ + install_dirs['platlib'] + if self.save_pythonpath: + os.environ['PYTHONPATH'] = lib_dirs + os.pathsep + \ + self.save_pythonpath + else: + os.environ['PYTHONPATH'] = lib_dirs + + return self._temp_dir.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 diff --git a/src/pip/_internal/wheel.py b/src/pip/_internal/wheel.py index c8fc21518..45a7590a9 100644 --- a/src/pip/_internal/wheel.py +++ b/src/pip/_internal/wheel.py @@ -17,7 +17,6 @@ import sys import warnings from base64 import urlsafe_b64encode from email.parser import Parser -from sysconfig import get_paths from pip._vendor import pkg_resources, pytoml from pip._vendor.distlib.scripts import ScriptMaker @@ -25,6 +24,7 @@ from pip._vendor.packaging.utils import canonicalize_name from pip._vendor.six import StringIO from pip._internal import pep425tags +from pip._internal.build_env import BuildEnvironment from pip._internal.download import path_to_url, unpack_url from pip._internal.exceptions import ( InstallationError, InvalidWheelFilename, UnsupportedWheel, @@ -602,58 +602,6 @@ class Wheel(object): return bool(set(tags).intersection(self.file_tags)) -class BuildEnvironment(object): - """Context manager to install build deps in a simple temporary environment - """ - def __init__(self, no_clean): - self._temp_dir = TempDirectory(kind="build-env") - self._no_clean = no_clean - - def __enter__(self): - self._temp_dir.create() - - self.save_path = os.environ.get('PATH', None) - self.save_pythonpath = os.environ.get('PYTHONPATH', None) - - install_scheme = 'nt' if (os.name == 'nt') else 'posix_prefix' - install_dirs = get_paths(install_scheme, vars={ - 'base': self._temp_dir.path, - 'platbase': self._temp_dir.path, - }) - - scripts = install_dirs['scripts'] - if self.save_path: - os.environ['PATH'] = scripts + os.pathsep + self.save_path - else: - os.environ['PATH'] = scripts + os.pathsep + os.defpath - - if install_dirs['purelib'] == install_dirs['platlib']: - lib_dirs = install_dirs['purelib'] - else: - lib_dirs = install_dirs['purelib'] + os.pathsep + \ - install_dirs['platlib'] - if self.save_pythonpath: - os.environ['PYTHONPATH'] = lib_dirs + os.pathsep + \ - self.save_pythonpath - else: - os.environ['PYTHONPATH'] = lib_dirs - - return self._temp_dir.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 - - class WheelBuilder(object): """Build wheels from a RequirementSet.""" -- cgit v1.2.1 From cb6aa5be268a2dfc6a671a42985f87b3cd9a52a5 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Tue, 23 Jan 2018 21:32:34 +0530 Subject: Use a property --- src/pip/_internal/build_env.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pip/_internal/build_env.py b/src/pip/_internal/build_env.py index 4ae1c4d9f..52a53392c 100644 --- a/src/pip/_internal/build_env.py +++ b/src/pip/_internal/build_env.py @@ -15,6 +15,10 @@ class BuildEnvironment(object): self._temp_dir = TempDirectory(kind="build-env") self._no_clean = no_clean + @property + def path(self): + return self._temp_dir.path + def __enter__(self): self._temp_dir.create() @@ -23,8 +27,8 @@ class BuildEnvironment(object): install_scheme = 'nt' if (os.name == 'nt') else 'posix_prefix' install_dirs = get_paths(install_scheme, vars={ - 'base': self._temp_dir.path, - 'platbase': self._temp_dir.path, + 'base': self.path, + 'platbase': self.path, }) scripts = install_dirs['scripts'] @@ -44,7 +48,7 @@ class BuildEnvironment(object): else: os.environ['PYTHONPATH'] = lib_dirs - return self._temp_dir.path + return self.path def __exit__(self, exc_type, exc_val, exc_tb): if not self._no_clean: -- cgit v1.2.1