Co to jest format pliku PYD?
Dynamiczne moduły Python są zapisywane jako pliki .pyd w systemach Windows. Plik .pyd to systemowa biblioteka DLL w formacie binarnym PE (Portable Executable), wyróżniająca się eksportowaniem punktu wejścia PyInit_<modulename>, który interpreter wywołuje podczas importu. Moduły .pyd zawierają biblioteki, które mogą być używane przez inne aplikacje Python; biblioteki dynamiczne pozwalają na szybsze ładowanie kodu i modułowość aplikacji. W przeciwieństwie do plików bajtokodu .pyc i .pyo, pliki .pyd są specyficzne dla systemu Windows - format .so pełni tę samą rolę w systemach Linux i macOS.
Pliki .pyd zawierają skompilowane moduły rozszerzeń Python. Moduły zawierają jedną lub więcej przestrzeni nazw, a programy Python korzystające z takich modułów mogą odwoływać się do funkcji w nich zawartych. Moduły mogą być używane przez wiele aplikacji Python. Nowoczesne kompilacje zawierają znacznik ABI w nazwie pliku - na przykład cp312-win_amd64.pyd - co wiąże plik z konkretną wersją CPython i architekturą bitową. Tworzenie i dystrybucja modułów .pyd jest zazwyczaj obsługiwana przez narzędzia budowania, takie jak Cython lub setuptools.
Bezpieczeństwo
RYZYKO: MEDIUMPlik .pyd to natywny kod wykonywalny, który Python uruchamia wewnątrz swojego procesu bez piaskownicy, więc złośliwy .pyd może zrobić wszystko, co Twój program Python. Praktyczne zagrożenia: (1) plik .pyd umieszczony w folderze przeszukiwanym przez Pythona może przejąć import (DLL/PYD search-order hijacking), oraz (2) pobieranie pojedynczych plików .pyd z przypadkowych stron w celu „naprawienia” błędu jest wektorem złośliwego oprogramowania - zawsze instaluj właściwy pakiet z PyPI za pomocą pip. Pliki .pyd wewnątrz legalnych pakietów zainstalowanych przez pip są normalne. Traktuj nieoczekiwane, niepodpisane pliki .pyd w folderze Pobrane lub folderze projektu z podejrzliwością i skanuj je.
Szczegóły formatu
w pigułceProgramy otwierające pliki PYD
Szczegóły techniczne
specyfikacja| Format kontenera | Windows PE (Portable Executable) - ten sam kontener binarny co pliki `.dll` i `.exe` |
| Magiczne bajty | `MZ` (0x4D 0x5A) pod offsetem 0 (nagłówek DOS); sygnatura PE pod offsetem zapisanym w 0x3C |
| Kolejność bajtów | Little-endian |
| Kluczowy eksportowany symbol | `PyInit_<modulename>` (Python 3) lub `init<modulename>` (Python 2) - system importu CPython wywołuje tę funkcję, aby zainicjować moduł |
| Znacznik ABI w nazwie | Kompilacje z oznaczeniem wersji używają wzorca `nazwa.cpXYZ-win_amd64.pyd`; na przykład `cp312-win_amd64` dotyczy CPython 3.12 na 64-bitowym systemie Windows |
| Platforma | Tylko Windows; odpowiednikiem w systemach Linux i macOS jest obiekt współdzielony `.so` |
| Typ MIME | `application/octet-stream`; zarejestrowany również jako `application/vnd.microsoft.portable-executable` |
| Typowy rozmiar pliku | 20 KB - kilka MB; duże biblioteki natywne (np. komponenty NumPy lub SciPy) mogą osiągać dziesiątki MB |
| Kompresja | Brak - surowe sekcje PE, brak wbudowanej kompresji |
| Podpis kodu | Opcjonalny podpis cyfrowy Authenticode (PE); w przeciwnym razie integralność nie jest weryfikowana (natywny kod maszynowy) |
| Kompatybilność interpretera | Musi pasować do dokładnej wersji CPython, architektury (32/64-bit) i znacznika ABI; niezgodny plik zgłasza `ImportError` podczas importu |
| Narzędzia budowania | Zazwyczaj kompilowane ze źródeł C, C++ lub Cython za pomocą setuptools `ext_modules`, CMake/scikit-build lub CFFI |
| Wydano | Late 1990s - Python on Windows has loaded extension modules from .pyd (a renamed .dll) since the Python 1.x/2.0 era |
| Najnowsza wersja | Tracks CPython; the per-version ABI tag (e.g. cp312-win_amd64) determines compatibility, current CPython 3.13 (2024) |
| Otwarty standard | Tak · bezpłatny (royalty-free) |
| Specyfikacja | docs.python.org |
Konwersje PYD
Pytania i odpowiedzi społeczności
pytania użytkownikówBrak pytań - bądź pierwszą osobą, która zapyta o pliki PYD.