summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorphillip.eby <phillip.eby@6015fed2-1504-0410-9fe1-9d1591cc4771>2008-08-21 18:41:59 +0000
committerphillip.eby <phillip.eby@6015fed2-1504-0410-9fe1-9d1591cc4771>2008-08-21 18:41:59 +0000
commit5a0a6bd42e3d72c27c8baa5b2929ef1448d87ffa (patch)
tree4d8c020980f61af52c48ab6088ea1395b6f8a689
parentccd0ec45f003dd5cee32c37b18d8634a5ba34a6d (diff)
downloadpython-setuptools-5a0a6bd42e3d72c27c8baa5b2929ef1448d87ffa.tar.gz
Candidate fix for http://bugs.python.org/setuptools/issue20
git-svn-id: http://svn.python.org/projects/sandbox/trunk/setuptools@65949 6015fed2-1504-0410-9fe1-9d1591cc4771
-rwxr-xr-xsetuptools/sandbox.py10
1 files changed, 5 insertions, 5 deletions
diff --git a/setuptools/sandbox.py b/setuptools/sandbox.py
index 4db0dbd..ee4c3df 100755
--- a/setuptools/sandbox.py
+++ b/setuptools/sandbox.py
@@ -5,10 +5,8 @@ from distutils.errors import DistutilsError
__all__ = [
"AbstractSandbox", "DirectorySandbox", "SandboxViolation", "run_setup",
]
-
def run_setup(setup_script, args):
"""Run a distutils setup script, sandboxed in its directory"""
-
old_dir = os.getcwd()
save_argv = sys.argv[:]
save_path = sys.path[:]
@@ -16,10 +14,9 @@ def run_setup(setup_script, args):
temp_dir = os.path.join(setup_dir,'temp')
if not os.path.isdir(temp_dir): os.makedirs(temp_dir)
save_tmp = tempfile.tempdir
-
+ save_modules = sys.modules.copy()
try:
- tempfile.tempdir = temp_dir
- os.chdir(setup_dir)
+ tempfile.tempdir = temp_dir; os.chdir(setup_dir)
try:
sys.argv[:] = [setup_script]+list(args)
sys.path.insert(0, setup_dir)
@@ -34,6 +31,9 @@ def run_setup(setup_script, args):
raise
# Normal exit, just return
finally:
+ sys.modules.update(save_modules)
+ for key in list(sys.modules):
+ if key not in save_modules: del sys.modules[key]
os.chdir(old_dir)
sys.path[:] = save_path
sys.argv[:] = save_argv