web-dev-qa-db-fra.com

Quel est l'avantage de définir Zip_safe sur True lors de l'empaquetage d'un projet Python?

La documentation de setuptools indique uniquement:

Pour des performances maximales, les packages Python sont mieux installés sous forme de fichiers Zip. Cependant, tous les packages ne sont pas capables de s'exécuter sous forme compressée, car ils peuvent s'attendre à pouvoir accéder au code source ou aux données fichiers en tant que fichiers du système d'exploitation normal. Ainsi, setuptools peut installer votre projet en tant que fichier zip ou répertoire, et son choix par défaut est déterminé par l'indicateur Zip_safe du projet ( référence ).

Concrètement, quel est l'avantage de performance obtenu? Vaut-il la peine de vérifier si mes projets sont Zip-safe, ou les avantages sont-ils généralement minimes?

49
saffsd

Les fichiers Zip occupent moins d'espace sur le disque, ce qui signifie également qu'ils sont lus plus rapidement à partir du disque. Étant donné que la plupart des éléments sont liés aux E/S, la surcharge lors de la décompression de l'emballage peut être inférieure à la surcharge lors de la lecture d'un fichier plus volumineux à partir du disque. De plus, il est probable qu'un seul fichier Zip de petite taille soit stocké séquentiellement sur le disque, tandis qu'une collection de fichiers plus petits peut être plus répartie. Sur les supports en rotation, cela augmente également les performances de lecture en réduisant le nombre de recherches. Ainsi, vous optimisez généralement votre utilisation du disque au prix d'un certain temps CPU, ce qui peut considérablement améliorer votre import et les temps de chargement.

24
Livius

Il y a plusieurs avantages, en plus de ceux déjà mentionnés.

La lecture d'un fichier single grand .Egg (et sa décompression) peut être beaucoup plus rapide que le chargement de plusieurs (potentiellement beaucoup) fichiers .py plus petits, selon le support de stockage/système de fichiers sur lequel il réside.

Certains systèmes de fichiers ont une grande taille de bloc (par exemple, 1 Mo), ce qui signifie que traiter de petits fichiers peut être coûteux. Même si vos fichiers sont petits (disons 10 Ko), vous pouvez en fait charger un bloc de 1 Mo à partir du disque lors de sa lecture. En règle générale, les systèmes de fichiers combinent plusieurs petits fichiers dans un grand bloc pour atténuer cela un peu.

Sur les systèmes de fichiers où l'accès aux métadonnées de fichiers est lent (ce qui arrive parfois avec des systèmes de fichiers partagés, comme NFS), l'accès à une grande quantité de fichiers peut également être très coûteux.

Bien sûr, le zippage de tout le tas aide également, car cela signifie que moins de données devront être lues au total.

Pour faire court: il peut être très important que votre système de fichiers soit plus adapté à une petite quantité de fichiers volumineux.

12
Kenneth Hoste