1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #!/usr/bin/env python3
- import argparse
- import glob
- import pathlib
- from importlib.machinery import PathFinder
- from importlib.metadata import DistributionFinder
- from installer import install
- from installer._core import _process_WHEEL_file
- from installer.destinations import SchemeDictionaryDestination
- from installer.sources import WheelFile
- def clean(source, destination):
- scheme = _process_WHEEL_file(source)
- scheme_path = destination.scheme_dict[scheme]
- context = DistributionFinder.Context(
- name=source.distribution,
- path=[scheme_path],
- )
- for path in PathFinder.find_distributions(context=context):
- # path.files is either an iterable, or None
- if path.files is None:
- continue
- for file in path.files:
- file_path = pathlib.Path(file.locate())
- if file_path.exists():
- file_path.unlink()
- def main():
- """Entry point for CLI."""
- ap = argparse.ArgumentParser("python pyinstaller.py")
- ap.add_argument("wheel_file", help="Path to a .whl file to install")
- ap.add_argument(
- "--interpreter", required=True, help="Interpreter path to be used in scripts"
- )
- ap.add_argument(
- "--script-kind",
- required=True,
- choices=["posix", "win-ia32", "win-amd64", "win-arm", "win-arm64"],
- help="Kind of launcher to create for each script",
- )
- dest_args = ap.add_argument_group("Destination directories")
- dest_args.add_argument(
- "--purelib",
- required=True,
- help="Directory for platform-independent Python modules",
- )
- dest_args.add_argument(
- "--platlib",
- help="Directory for platform-dependent Python modules (same as purelib "
- "if not specified)",
- )
- dest_args.add_argument(
- "--headers", required=True, help="Directory for C header files"
- )
- dest_args.add_argument(
- "--scripts", required=True, help="Directory for executable scripts"
- )
- dest_args.add_argument(
- "--data", required=True, help="Directory for external data files"
- )
- args = ap.parse_args()
- destination = SchemeDictionaryDestination(
- {
- "purelib": args.purelib,
- "platlib": args.platlib if args.platlib is not None else args.purelib,
- "headers": args.headers,
- "scripts": args.scripts,
- "data": args.data,
- },
- interpreter=args.interpreter,
- script_kind=args.script_kind,
- )
- with WheelFile.open(glob.glob(args.wheel_file)[0]) as source:
- clean(source, destination)
- install(
- source=source,
- destination=destination,
- additional_metadata={},
- )
- if __name__ == "__main__":
- main()
|