diff options
author | Pradyun Gedam <pradyunsg@gmail.com> | 2018-01-23 02:53:56 +0530 |
---|---|---|
committer | Pradyun Gedam <pradyunsg@gmail.com> | 2018-01-23 22:08:21 +0530 |
commit | 470d48ad6e4209c76dd3b9eab2112b85377d17a0 (patch) | |
tree | 3c68292106625565343c5c1c8d8ae458d779f263 /src | |
parent | 4f8541972f65e347dc76518f8a5554aac8acdf3d (diff) | |
download | pip-470d48ad6e4209c76dd3b9eab2112b85377d17a0.tar.gz |
Move BuildEnvironment out of wheel.py
Diffstat (limited to 'src')
-rw-r--r-- | src/pip/_internal/build_env.py | 60 | ||||
-rw-r--r-- | src/pip/_internal/wheel.py | 54 |
2 files changed, 61 insertions, 53 deletions
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.""" |