Wat is het PYD-bestandsformaat?
Python dynamische modules worden opgeslagen als .pyd-bestanden op Windows-systemen. Een .pyd-bestand is een Windows DLL in PE (Portable Executable) binair formaat, gekenmerkt door het exporteren van een PyInit_<modulename> ingangspunt dat de interpreter aanroept bij import. .pyd-modules bevatten bibliotheken die door andere Python-applicaties kunnen worden gebruikt; dynamische bibliotheken maken snellere codelading en applicatiemodulariteit mogelijk. In tegenstelling tot .pyc en .pyo bytecode-bestanden, zijn .pyd-bestanden specifiek voor Windows - het .so formaat vervult dezelfde rol op Linux en macOS.
.pyd-bestanden bevatten gecompileerde Python-extensiemodules. Modules bevatten een of meer namespaces, en Python-programma's die dergelijke modules gebruiken, kunnen verwijzen naar functies in die modules. Modules kunnen door meerdere Python-applicaties worden gebruikt. Moderne builds bevatten een ABI-tag in de bestandsnaam - bijvoorbeeld cp312-win_amd64.pyd - waardoor het bestand wordt gekoppeld aan een specifieke CPython-versie en bit-architectuur. Het maken en distribueren van .pyd-modules wordt doorgaans afgehandeld door build-tools zoals Cython of setuptools.
Beveiliging & veiligheid
RISICO: MEDIUMEen .pyd is native uitvoerbare code die Python in-process uitvoert zonder sandbox, dus een kwaadaardige .pyd kan alles doen wat je Python-programma kan. De praktische risico's: (1) een .pyd die in een map wordt geplaatst die Python doorzoekt, kan een import kapen (DLL/PYD search-order hijacking), en (2) het downloaden van individuele .pyd-bestanden van willekeurige sites om een fout te „herstellen” is een vector voor malware - installeer altijd het juiste pakket van PyPI met pip. .pyd-bestanden binnen legitieme via pip geïnstalleerde pakketten zijn normaal. Behandel een onverwachte, niet-ondertekende .pyd in Downloads of een projectmap met achterdocht en scan deze.
Formaatdetails
in een notendopProgramma's die PYD-bestanden openen
Technische details
diepe specificaties| Containerformaat | Windows PE (Portable Executable) - dezelfde binaire container als `.dll` en `.exe` bestanden |
| Magic bytes | `MZ` (0x4D 0x5A) op offset 0 (DOS stub); PE-handtekening op de offset opgeslagen op 0x3C |
| Bytevolgorde | Little-endian |
| Belangrijk geëxporteerd symbool | `PyInit_<modulename>` (Python 3) of `init<modulename>` (Python 2) - het importsysteem van CPython roept deze functie aan om de module te initialiseren |
| ABI-bestandsnaamtag | Builds met versietags gebruiken het patroon `name.cpXYZ-win_amd64.pyd`; bijvoorbeeld `cp312-win_amd64` is bedoeld voor CPython 3.12 op 64-bit Windows |
| Platform | Alleen Windows; het equivalent voor Linux en macOS is een gedeeld object `.so` |
| MIME-type | `application/octet-stream`; ook geregistreerd als `application/vnd.microsoft.portable-executable` |
| Typische bestandsgrootte | 20 KB - verschillende MB; grote native bibliotheken (bijv. NumPy- of SciPy-componenten) kunnen tientallen MB bereiken |
| Compressie | Geen - ruwe PE-secties, geen ingebouwde compressie |
| Code-ondertekening | Optionele Authenticode (PE) digitale handtekening; integriteit is anders niet geverifieerd (native machinecode) |
| Interpreter-compatibiliteit | Moet exact overeenkomen met de CPython-versie, bit-architectuur (32/64-bit) en ABI-tag; een niet-overeenkomend bestand veroorzaakt `ImportError` bij import |
| Build-toolchain | Meestal gecompileerd uit C, C++ of Cython-broncode via setuptools `ext_modules`, CMake/scikit-build of CFFI |
| Uitgebracht | Late 1990s - Python on Windows has loaded extension modules from .pyd (a renamed .dll) since the Python 1.x/2.0 era |
| Laatste versie | Tracks CPython; the per-version ABI tag (e.g. cp312-win_amd64) determines compatibility, current CPython 3.13 (2024) |
| Open standaard | Ja · royaltyvrij |
| Specificatie | docs.python.org |
PYD conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over PYD-bestanden.