Tecnología · GUÍA PRÁCTICA
¿zipfile.Path.is_symlink() siempre da False? Revise versión y tipo guardado
Veinte controles locales separan la implementación provisional de Python 3.12, los atributos Unix del ZIP, la integridad CRC y lo que realmente crea el extractor estándar.

En CPython 3.12.14, un miembro ZIP sintético marcado como enlace simbólico Unix existía y devolvía True en zipfile.Path.is_file(), pero is_symlink() daba False. Su modo almacenado identificaba el enlace. Ese False no demostraba que el archivo contuviera únicamente ficheros normales.
Compruebe el entorno y la convención de metadatos antes de cambiar el archivo. Nuestros 20 controles con aserciones usaron siete miembros en un ZIP sintético de 751 bytes sobre Linux. También mostraron que pasar CRC, extraer correctamente e identificar el tipo almacenado son resultados distintos.
1. Pruebe la implementación, no solo su existencia
Muestre sys.version y confirme que el objeto es zipfile.Path, no pathlib.Path sobre un fichero ya extraído. En el intérprete 3.12.14 real, inspeccionar el código de zipfile.Path.is_symlink mostró que simplemente devuelve False. El método era invocable, así que comprobar la existencia del atributo no habría detectado la limitación.
La referencia por versiones registra el cambio en 3.13: antes, is_symlink devolvía False incondicionalmente. Leímos esa documentación, pero no ejecutamos 3.13. Pruebe su versión desplegada con un ejemplo conocido e inocuo marcado como enlace; no deduzca el comportamiento solo de la documentación reciente o del nombre del método.
2. Inspeccione cada miembro bajo una convención explícita
Recorra infolist() del archivo abierto y conserve cada ZipInfo. Registre filename, create_system y la expresión de modo info.external_attr >>16. Para la convención Unix probada aquí, exija create_system==3 antes de interpretar el modo con stat.S_ISLNK, stat.S_ISREG o stat.S_ISDIR. Clasifican bits de tipo guardados, no el sistema de archivos actual.
PKWARE define los atributos externos como dependientes del sistema anfitrión. Nuestro clasificador limitado deja como unknown los anfitriones no Unix y los modos sin tipo reconocido. Unknown no significa normal ni libre de problemas. Otros productores y convenciones necesitan verificación propia, en vez de forzar una respuesta negativa.
3. Separe nombres, texto del destino y bits de tipo
En el ejemplo, alias y dangling estaban marcados como enlaces aunque dangling nombrara un destino ausente. Leerlos devolvió los textos almacenados target.txt y absent.txt. El miembro normal ordinary.link siguió siendo un fichero normal según sus bits Unix explícitos: la extensión no establecía el tipo de enlace.
folder/ tenía nombre de directorio y modo de directorio. ZipInfo.is_dir utiliza la barra final del nombre; no equivale a examinar todos los bits de tipo Unix. El miembro con permisos únicamente no tenía un tipo reconocido y quedó como unknown. Los permisos solos no justificaban llamarlo fichero normal.
4. Mida el resultado de extracción por separado
testzip() devolvió None para todo el ejemplo: los miembros probados pasaron esa comprobación de CRC y cabeceras. Los metadatos del enlace seguían presentes. La integridad no había respondido si el miembro era un enlace simbólico ni si otro extractor restauraría uno.
Extrajimos únicamente el miembro inocuo alias con ZipFile.extract estándar a un directorio temporal nuevo. En esta ejecución 3.12.14/Linux, el resultado fue un fichero normal con el texto target.txt, no un enlace simbólico del sistema operativo. No ejecutamos extractores externos. No generalice este resultado a otros programas ni cambie metadatos para obtener el booleano que esperaba.
5. Defina la comprobación final según la entrega
Los 20 controles comprobaron disponibilidad del método, exists/is_file/is_symlink, la matriz de siete miembros, destino ausente y extensión como controles, metadatos desconocidos, CRC, texto almacenado, un miembro inexistente y el tipo y contenido exacto del fichero extraído. El informe conserva entorno, código del predicado y hashes del script y del ZIP.
En su flujo, mantenga el archivo intacto y una muestra pequeña conocida. Verifique el inventario y clasifique solo las convenciones que su política admite; investigue o rechace tipos desconocidos según esa política. Después compruebe los tipos y contenidos que produce el extractor previsto. Es un diagnóstico de tipos de miembros, no un validador completo de extracción de archivos no confiables ni una garantía entre plataformas.
