summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPradyun Gedam <pradyunsg@gmail.com>2018-01-23 02:53:56 +0530
committerPradyun Gedam <pradyunsg@gmail.com>2018-01-23 22:08:21 +0530
commit470d48ad6e4209c76dd3b9eab2112b85377d17a0 (patch)
tree3c68292106625565343c5c1c8d8ae458d779f263 /src
parent4f8541972f65e347dc76518f8a5554aac8acdf3d (diff)
downloadpip-470d48ad6e4209c76dd3b9eab2112b85377d17a0.tar.gz
Move BuildEnvironment out of wheel.py
Diffstat (limited to 'src')
-rw-r--r--src/pip/_internal/build_env.py60
-rw-r--r--src/pip/_internal/wheel.py54
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."""