Skip to content

Commit de73f73

Browse files
committed
Replace enormous try block with self.addCleanup
1 parent 3266ff9 commit de73f73

File tree

1 file changed

+58
-60
lines changed

1 file changed

+58
-60
lines changed

Lib/test/test_venv.py

Lines changed: 58 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -549,67 +549,65 @@ def test_zippath_from_non_installed_posix(self):
549549
# functional non-installed python, but enough for this test.
550550
platlibdir = sys.platlibdir
551551
non_installed_dir = os.path.realpath(tempfile.mkdtemp())
552-
try:
553-
bindir = os.path.join(non_installed_dir, self.bindir)
554-
os.mkdir(bindir)
555-
shutil.copy2(sys.executable, bindir)
556-
libdir = os.path.join(non_installed_dir, platlibdir, self.lib[1])
557-
os.makedirs(libdir)
558-
landmark = os.path.join(libdir, "os.py")
559-
stdlib_zip = "python%d%d.zip" % sys.version_info[:2]
560-
zip_landmark = os.path.join(non_installed_dir,
561-
platlibdir,
562-
stdlib_zip)
563-
additional_pythonpath_for_non_installed = []
564-
# Copy stdlib files to the non-installed python so venv can
565-
# correctly calculate the prefix.
566-
for eachpath in sys.path:
567-
if eachpath.endswith(".zip"):
568-
if os.path.isfile(eachpath):
569-
shutil.copyfile(
570-
eachpath,
571-
os.path.join(non_installed_dir, platlibdir))
572-
elif os.path.isfile(os.path.join(eachpath, "os.py")):
573-
for name in os.listdir(eachpath):
574-
if name == "site-packages":
575-
continue
576-
fn = os.path.join(eachpath, name)
577-
if os.path.isfile(fn):
578-
shutil.copy(fn, libdir)
579-
elif os.path.isdir(fn):
580-
shutil.copytree(fn, os.path.join(libdir, name))
581-
else:
582-
additional_pythonpath_for_non_installed.append(
583-
eachpath)
584-
cmd = [os.path.join(non_installed_dir, self.bindir, self.exe),
585-
"-m",
586-
"venv",
587-
"--without-pip",
588-
self.env_dir]
589-
# Our fake non-installed python is not fully functional because
590-
# it cannot find the extensions. Set PYTHONPATH so it can run the
591-
# venv module correctly.
592-
pythonpath = os.pathsep.join(
593-
additional_pythonpath_for_non_installed)
594-
# For python built with shared enabled. We need to set
595-
# LD_LIBRARY_PATH so the non-installed python can find and link
596-
# libpython.so
597-
ld_library_path = os.path.abspath(os.path.dirname(sys.executable))
598-
if sys.platform == 'darwin':
599-
ld_library_path_env = "DYLD_LIBRARY_PATH"
552+
self.addCleanup(rmtree, non_installed_dir)
553+
bindir = os.path.join(non_installed_dir, self.bindir)
554+
os.mkdir(bindir)
555+
shutil.copy2(sys.executable, bindir)
556+
libdir = os.path.join(non_installed_dir, platlibdir, self.lib[1])
557+
os.makedirs(libdir)
558+
landmark = os.path.join(libdir, "os.py")
559+
stdlib_zip = "python%d%d.zip" % sys.version_info[:2]
560+
zip_landmark = os.path.join(non_installed_dir,
561+
platlibdir,
562+
stdlib_zip)
563+
additional_pythonpath_for_non_installed = []
564+
# Copy stdlib files to the non-installed python so venv can
565+
# correctly calculate the prefix.
566+
for eachpath in sys.path:
567+
if eachpath.endswith(".zip"):
568+
if os.path.isfile(eachpath):
569+
shutil.copyfile(
570+
eachpath,
571+
os.path.join(non_installed_dir, platlibdir))
572+
elif os.path.isfile(os.path.join(eachpath, "os.py")):
573+
for name in os.listdir(eachpath):
574+
if name == "site-packages":
575+
continue
576+
fn = os.path.join(eachpath, name)
577+
if os.path.isfile(fn):
578+
shutil.copy(fn, libdir)
579+
elif os.path.isdir(fn):
580+
shutil.copytree(fn, os.path.join(libdir, name))
600581
else:
601-
ld_library_path_env = "LD_LIBRARY_PATH"
602-
subprocess.check_call(cmd,
603-
env={"PYTHONPATH": pythonpath,
604-
ld_library_path_env: ld_library_path})
605-
envpy = os.path.join(self.env_dir, self.bindir, self.exe)
606-
# Now check the venv created from the non-installed python has
607-
# correct zip path in pythonpath.
608-
cmd = [envpy, '-S', '-c', 'import sys; print(sys.path)']
609-
out, err = check_output(cmd)
610-
self.assertTrue(zip_landmark.encode() in out)
611-
finally:
612-
rmtree(non_installed_dir)
582+
additional_pythonpath_for_non_installed.append(
583+
eachpath)
584+
cmd = [os.path.join(non_installed_dir, self.bindir, self.exe),
585+
"-m",
586+
"venv",
587+
"--without-pip",
588+
self.env_dir]
589+
# Our fake non-installed python is not fully functional because
590+
# it cannot find the extensions. Set PYTHONPATH so it can run the
591+
# venv module correctly.
592+
pythonpath = os.pathsep.join(
593+
additional_pythonpath_for_non_installed)
594+
# For python built with shared enabled. We need to set
595+
# LD_LIBRARY_PATH so the non-installed python can find and link
596+
# libpython.so
597+
ld_library_path = os.path.abspath(os.path.dirname(sys.executable))
598+
if sys.platform == 'darwin':
599+
ld_library_path_env = "DYLD_LIBRARY_PATH"
600+
else:
601+
ld_library_path_env = "LD_LIBRARY_PATH"
602+
subprocess.check_call(cmd,
603+
env={"PYTHONPATH": pythonpath,
604+
ld_library_path_env: ld_library_path})
605+
envpy = os.path.join(self.env_dir, self.bindir, self.exe)
606+
# Now check the venv created from the non-installed python has
607+
# correct zip path in pythonpath.
608+
cmd = [envpy, '-S', '-c', 'import sys; print(sys.path)']
609+
out, err = check_output(cmd)
610+
self.assertTrue(zip_landmark.encode() in out)
613611

614612
@requireVenvCreate
615613
class EnsurePipTest(BaseTest):

0 commit comments

Comments
 (0)