$66 GRAYBYTE WORDPRESS FILE MANAGER $28

SERVER : premium201.web-hosting.com #1 SMP Wed Mar 26 12:08:09 UTC 2025
SERVER IP : 172.67.160.161 | ADMIN IP 216.73.216.147
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/hc_python/lib/python3.12/site-packages/wheel/vendored/packaging/

HOME
Current File : /opt/hc_python/lib/python3.12/site-packages/wheel/vendored/packaging//_musllinux.py
"""PEP 656 support.

This module implements logic to detect if the currently running Python is
linked against musl, and what musl version is used.
"""

import functools
import re
import subprocess
import sys
from typing import Iterator, NamedTuple, Optional, Sequence

from ._elffile import ELFFile


class _MuslVersion(NamedTuple):
    major: int
    minor: int


def _parse_musl_version(output: str) -> Optional[_MuslVersion]:
    lines = [n for n in (n.strip() for n in output.splitlines()) if n]
    if len(lines) < 2 or lines[0][:4] != "musl":
        return None
    m = re.match(r"Version (\d+)\.(\d+)", lines[1])
    if not m:
        return None
    return _MuslVersion(major=int(m.group(1)), minor=int(m.group(2)))


@functools.lru_cache
def _get_musl_version(executable: str) -> Optional[_MuslVersion]:
    """Detect currently-running musl runtime version.

    This is done by checking the specified executable's dynamic linking
    information, and invoking the loader to parse its output for a version
    string. If the loader is musl, the output would be something like::

        musl libc (x86_64)
        Version 1.2.2
        Dynamic Program Loader
    """
    try:
        with open(executable, "rb") as f:
            ld = ELFFile(f).interpreter
    except (OSError, TypeError, ValueError):
        return None
    if ld is None or "musl" not in ld:
        return None
    proc = subprocess.run([ld], stderr=subprocess.PIPE, text=True)
    return _parse_musl_version(proc.stderr)


def platform_tags(archs: Sequence[str]) -> Iterator[str]:
    """Generate musllinux tags compatible to the current platform.

    :param archs: Sequence of compatible architectures.
        The first one shall be the closest to the actual architecture and be the part of
        platform tag after the ``linux_`` prefix, e.g. ``x86_64``.
        The ``linux_`` prefix is assumed as a prerequisite for the current platform to
        be musllinux-compatible.

    :returns: An iterator of compatible musllinux tags.
    """
    sys_musl = _get_musl_version(sys.executable)
    if sys_musl is None:  # Python not dynamically linked against musl.
        return
    for arch in archs:
        for minor in range(sys_musl.minor, -1, -1):
            yield f"musllinux_{sys_musl.major}_{minor}_{arch}"


if __name__ == "__main__":  # pragma: no cover
    import sysconfig

    plat = sysconfig.get_platform()
    assert plat.startswith("linux-"), "not linux"

    print("plat:", plat)
    print("musl:", _get_musl_version(sys.executable))
    print("tags:", end=" ")
    for t in platform_tags(re.sub(r"[.-]", "_", plat.split("-", 1)[-1])):
        print(t, end="\n      ")

Current_dir [ NOT WRITEABLE ] Document_root [ NOT WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
4 Apr 2025 8.03 AM
root / root
0755
__pycache__
--
4 Apr 2025 8.03 AM
root / root
0755
LICENSE
0.192 KB
4 Apr 2025 8.03 AM
root / root
0644
LICENSE.APACHE
9.936 KB
4 Apr 2025 8.03 AM
root / root
0644
LICENSE.BSD
1.313 KB
4 Apr 2025 8.03 AM
root / root
0644
__init__.py
0 KB
4 Apr 2025 8.03 AM
root / root
0644
_elffile.py
3.189 KB
4 Apr 2025 8.03 AM
root / root
0644
_manylinux.py
9.363 KB
4 Apr 2025 8.03 AM
root / root
0644
_musllinux.py
2.611 KB
4 Apr 2025 8.03 AM
root / root
0644
_parser.py
10.104 KB
4 Apr 2025 8.03 AM
root / root
0644
_structures.py
1.397 KB
4 Apr 2025 8.03 AM
root / root
0644
_tokenizer.py
5.168 KB
4 Apr 2025 8.03 AM
root / root
0644
markers.py
8.039 KB
4 Apr 2025 8.03 AM
root / root
0644
requirements.py
2.864 KB
4 Apr 2025 8.03 AM
root / root
0644
specifiers.py
38.846 KB
4 Apr 2025 8.03 AM
root / root
0644
tags.py
18.506 KB
4 Apr 2025 8.03 AM
root / root
0644
utils.py
5.145 KB
4 Apr 2025 8.03 AM
root / root
0644
version.py
15.854 KB
4 Apr 2025 8.03 AM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF Static GIF