|
from __future__ import annotations |
|
|
|
from pathlib import Path |
|
|
|
from ..wheelfile import WheelFile |
|
|
|
|
|
def unpack(path: str, dest: str = ".") -> None: |
|
"""Unpack a wheel. |
|
|
|
Wheel content will be unpacked to {dest}/{name}-{ver}, where {name} |
|
is the package name and {ver} its version. |
|
|
|
:param path: The path to the wheel. |
|
:param dest: Destination directory (default to current directory). |
|
""" |
|
with WheelFile(path) as wf: |
|
namever = wf.parsed_filename.group("namever") |
|
destination = Path(dest) / namever |
|
print(f"Unpacking to: {destination}...", end="", flush=True) |
|
for zinfo in wf.filelist: |
|
wf.extract(zinfo, destination) |
|
|
|
|
|
|
|
|
|
permissions = zinfo.external_attr >> 16 & 0o777 |
|
destination.joinpath(zinfo.filename).chmod(permissions) |
|
|
|
print("OK") |
|
|