summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPradyun Gedam <pradyunsg@gmail.com>2018-01-25 09:06:54 +0530
committerGitHub <noreply@github.com>2018-01-25 09:06:54 +0530
commit14a11bd8b186cc195d2b083dcca1c5e89a6f23f2 (patch)
treeab1b9251156b379604d5242ee7fc16d1fa06e7fb /src
parent1ea3f89ff9f005c78413907b36e55b3e76092612 (diff)
parentcb6aa5be268a2dfc6a671a42985f87b3cd9a52a5 (diff)
downloadpip-14a11bd8b186cc195d2b083dcca1c5e89a6f23f2.tar.gz
Merge pull request #4990 from pradyunsg/misc/move-build-requirement
Move BuildEnvironment into it's own file
Diffstat (limited to 'src')
-rw-r--r--src/pip/_internal/build_env.py64
-rw-r--r--src/pip/_internal/wheel.py54
2 files changed, 65 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..52a53392c
--- /dev/null
+++ b/src/pip/_internal/build_env.py
@@ -0,0 +1,64 @@
+"""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
+
+ @property
+ def path(self):
+ return self._temp_dir.path
+
+ 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.path,
+ 'platbase': self.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.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 92a38d72e..074e25f83 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."""