12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- import argparse
- import glob
- import os
- from pathlib import Path
- from zipfile import ZipFile
- # Exclude some standard library modules to:
- # 1. Slim down the final zipped file size
- # 2. Remove functionality we don't want to support.
- DENY_LIST = [
- # Interface to unix databases
- "dbm",
- # ncurses bindings (terminal interfaces)
- "curses",
- # Tcl/Tk GUI
- "tkinter",
- "tkinter",
- # Tests for the standard library
- "test",
- "tests",
- "idle_test",
- "__phello__.foo.py",
- # importlib frozen modules. These are already baked into CPython.
- "_bootstrap.py",
- "_bootstrap_external.py",
- ]
- def remove_prefix(text, prefix):
- if text.startswith(prefix):
- return text[len(prefix):]
- return text
- def write_to_zip(file_path, strip_file_path, zf, prepend_str=""):
- stripped_file_path = prepend_str + remove_prefix(file_path, strip_file_dir + "/")
- path = Path(stripped_file_path)
- if path.name in DENY_LIST:
- return
- zf.write(file_path, stripped_file_path)
- if __name__ == "__main__":
- parser = argparse.ArgumentParser(description="Zip py source")
- parser.add_argument("paths", nargs="*", help="Paths to zip.")
- parser.add_argument("--install-dir", "--install_dir", help="Root directory for all output files")
- parser.add_argument("--strip-dir", "--strip_dir", help="The absolute directory we want to remove from zip")
- parser.add_argument(
- "--prepend-str", "--prepend_str", help="A string to prepend onto all paths of a file in the zip", default=""
- )
- parser.add_argument("--zip-name", "--zip_name", help="Output zip name")
- args = parser.parse_args()
- zip_file_name = args.install_dir + '/' + args.zip_name
- strip_file_dir = args.strip_dir
- prepend_str = args.prepend_str
- zf = ZipFile(zip_file_name, mode='w')
- for p in args.paths:
- if os.path.isdir(p):
- files = glob.glob(p + "/**/*.py", recursive=True)
- for file_path in files:
- # strip the absolute path
- write_to_zip(file_path, strip_file_dir + "/", zf, prepend_str=prepend_str)
- else:
- write_to_zip(p, strip_file_dir + "/", zf, prepend_str=prepend_str)
|