Che cos'è il formato di file PYD?
I moduli dinamici Python vengono salvati come file .pyd sui sistemi Windows. Un file .pyd è una DLL di Windows in formato binario PE (Portable Executable), distinta dall'esportazione di un punto di ingresso PyInit_<modulename> che l'interprete chiama all'importazione. I moduli .pyd contengono librerie che possono essere utilizzate da altre applicazioni Python; le librerie dinamiche consentono un caricamento del codice più rapido e la modularità dell'applicazione. Contrariamente ai file bytecode .pyc e .pyo, i file .pyd sono specifici per Windows - il formato .so svolge lo stesso ruolo su Linux e macOS.
I file .pyd contengono moduli di estensione Python compilati. I moduli contengono uno o più namespace e i programmi Python che utilizzano tali moduli possono fare riferimento alle funzioni in essi contenute. I moduli possono essere utilizzati da più applicazioni Python. Le build moderne includono un tag ABI nel nome del file - ad esempio, cp312-win_amd64.pyd - vincolando il file a una specifica versione di CPython e architettura. La creazione e la distribuzione di moduli .pyd è solitamente gestita da strumenti di build come Cython o setuptools.
Sicurezza e incolumità
RISCHIO: MEDIUMUn .pyd è codice eseguibile nativo che Python esegue nel processo senza sandbox, quindi un .pyd malevolo può fare tutto ciò che può fare il tuo programma Python. I rischi pratici: (1) un .pyd inserito in una cartella cercata da Python può dirottare un'importazione (DLL/PYD search-order hijacking), e (2) scaricare singoli file .pyd da siti casuali per «riparare» un errore è un vettore di malware - reinstalla sempre il pacchetto corretto da PyPI con pip. I file .pyd all'interno di pacchetti legittimi installati tramite pip sono normali. Tratta con sospetto un .pyd inaspettato e non firmato nella cartella Download o in quella di un progetto e scansionalo.
Dettagli del formato
in sintesiProgrammi che aprono file PYD
Dettagli tecnici
specifiche approfondite| Formato contenitore | Windows PE (Portable Executable) - lo stesso contenitore binario dei file `.dll` e `.exe` |
| Magic bytes | `MZ` (0x4D 0x5A) all'offset 0 (stub DOS); firma PE all'offset memorizzato in 0x3C |
| Ordine dei byte | Little-endian |
| Simbolo esportato chiave | `PyInit_<modulename>` (Python 3) o `init<modulename>` (Python 2) - il sistema di importazione di CPython chiama questa funzione per inizializzare il modulo |
| Tag ABI nel nome file | Le build con tag di versione usano lo schema `nome.cpXYZ-win_amd64.pyd`; ad esempio `cp312-win_amd64` è destinato a CPython 3.12 su Windows a 64 bit |
| Piattaforma | Solo Windows; l'equivalente per Linux e macOS è un oggetto condiviso `.so` |
| Tipo MIME | `application/octet-stream`; registrato anche come `application/vnd.microsoft.portable-executable` |
| Dimensione tipica del file | 20 KB - diversi MB; le librerie native di grandi dimensioni (es. componenti NumPy o SciPy) possono raggiungere decine di MB |
| Compressione | Nessuna - sezioni PE grezze, nessuna compressione integrata |
| Firma del codice | Firma digitale Authenticode (PE) opzionale; l'integrità è altrimenti non verificata (codice macchina nativo) |
| Compatibilità interprete | Deve corrispondere all'esatta versione di CPython, all'architettura (32/64 bit) e al tag ABI; un file non corrispondente genera `ImportError` all'importazione |
| Toolchain di build | In genere compilato da sorgenti C, C++ o Cython tramite `ext_modules` di setuptools, CMake/scikit-build o CFFI |
| Rilasciato | Late 1990s - Python on Windows has loaded extension modules from .pyd (a renamed .dll) since the Python 1.x/2.0 era |
| Ultima versione | Tracks CPython; the per-version ABI tag (e.g. cp312-win_amd64) determines compatibility, current CPython 3.13 (2024) |
| Standard aperto | Sì · royalty-free |
| Specifica | docs.python.org |
Conversioni PYD
Domande e risposte della community
chiesto dagli utentiAncora nessuna domanda - sii il primo a chiedere informazioni sui file PYD.