web-dev-qa-db-fra.com

Python packaging: roues vs tarball (tar.gz)

L'avantage des roues sur les œufs est clair (voir la section pourquoi pas les œufs? https://pypi.python.org/pypi/wheel ).

Cependant, il n'est pas tout à fait clair pour moi quel est l'avantage d'utiliser des roues sur tar.gz. Il se peut que je manque quelque chose d'évident comme "ce sont les mêmes". Comme je le vois, les deux peuvent être installés directement à l'aide de pip (même sous Windows), ont une taille similaire et lorsque l'emballage nécessite un effort similaire. Cela me semble être le genre de questions que vous pourriez vous poser pour justifier une méthodologie d'emballage.

EDIT: Je viens de trouver un exemple où tar.gz pourrait être mieux que les roues. CherryPy ( https://pypi.python.org/pypi/CherryPy ) fournit des roues pour Python 3.x uniquement, donc si vous voulez avoir un référentiel local pour servir CherryPy pour les dépendances Python 2.7 et 3.x, il semble plus logique de stocker l'archive tar. Est-ce correct? (juste pour ajouter quelques justifications "basées sur la casse" à la discussion)

35
zom-pro

Cela m'a répondu (directement à partir de la roue PEP):

Python a besoin d'un format de package plus facile à installer que sdist. Les packages sdist de Python sont définis par et nécessitent les systèmes de construction distutils et setuptools, exécutant du code arbitraire pour construire et installer et recompiler le code juste pour qu'il puisse être installé dans un nouveau virtualenv. Ce système de regroupement de build-install est lent, difficile à entretenir et entrave l'innovation dans les systèmes de build et les installateurs.

Wheel tente de remédier à ces problèmes en fournissant une interface plus simple entre le système de génération et le programme d'installation. Le format de package binaire de roue évite aux installateurs d'avoir à connaître le système de génération, fait gagner du temps en amortissant le temps de compilation sur de nombreuses installations et supprime la nécessité d'installer un système de génération dans l'environnement cible.

https://www.python.org/dev/peps/pep-0427/#rationale

Notez que les tarballs dont nous parlons sont ce que l'on appelle ci-dessus "sdists".

18
brk3

De Roues Python

Avantages des roues

• Installation plus rapide pour les python et packages d'extension C natifs).
• Évite l'exécution de code arbitraire pour l'installation. (Évite setup.py)
• L'installation d'une extension C ne nécessite pas de compilateur sous Windows ou OS X.
• Permet une meilleure mise en cache pour les tests et l'intégration continue.
• Crée des fichiers .pyc dans le cadre de l'installation pour s'assurer qu'ils correspondent à l'interpréteur python utilisé.
• Installations plus cohérentes sur toutes les plates-formes et machines.

Assurez-vous que la roue est installée.

pip install wheel
6
karel