From 70dd0b520712e76b43e674eae51ee6253775e2b2 Mon Sep 17 00:00:00 2001 From: Akemi Izuko Date: Sat, 9 Dec 2023 18:29:43 -0700 Subject: [PATCH] Add venv removal script --- bin/rmvenv.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 bin/rmvenv.py diff --git a/bin/rmvenv.py b/bin/rmvenv.py new file mode 100755 index 0000000..738f6ae --- /dev/null +++ b/bin/rmvenv.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +import argparse +import shlex +import shutil +import subprocess +from pathlib import Path + +parser = argparse.ArgumentParser( + prog="Remove venv v1.0.0", + formatter_class=argparse.RawTextHelpFormatter, + description="Remove all the venv-created files", +) +parser.add_argument( + "--freeze", + action="store_true", + help="Runs a venv freeze before deleting", +) +parser.add_argument( + "--dir", + type=Path, + help="Choose directory to remove venv inside", +) +args = parser.parse_args() + +VENV_BASENAMES = [ + "1", + "bin", + "include", + "lib", + "lib64", + "pyvenv.cfg", +] + + +def check_for_venv(directory): + global VENV_BASENAMES + + for file in VENV_BASENAMES: + if not (directory / file).exists(): + print(f"Missing file {file}") + return False + + return True + + +def rm_venv(directory): + for file in VENV_BASENAMES: + p = directory / file + + if p.is_dir(): + shutil.rmtree(p) + else: + p.unlink() + + +if __name__ == "__main__": + p = Path().cwd() if args.dir == None else args.dir + + if not check_for_venv(p): + print("Not a venv") + exit(1) + + if args.freeze: + subprocess.run( + shlex.split("bash -c '. bin/activate && pip freeze > requirements.txt'") + ) + + rm_venv(p)