2009-10-13 19 views
11

Habituellement, j'ai tendance à installer des choses via le gestionnaire de paquets, pour les choses unixy. Cependant, quand j'ai programmé beaucoup de Perl, j'utiliserais CPAN, des versions plus récentes et tout ça.Quel est le plus pythonique: installer des modules python via un gestionnaire de paquets (macports, apt) ou via pip/easy_install/setuptools

En général, j'utilisé pour installer des trucs du système via le gestionnaire de paquets, et d'autres choses de la langue par l'intermédiaire de son propre gestionnaire de paquets (gem/easy_install | pip/CPAN)

Maintenant, en utilisant principalement python, je me demande ce que les meilleures pratiques est ?

Répondre

17

La version système python et ses bibliothèques sont souvent utilisées par les logiciels dans la distribution. Tant que le logiciel que vous utilisez est satisfait des mêmes versions de python et de toutes les bibliothèques que votre distribution, l'utilisation des paquets de distribution fonctionnera très bien.

Cependant, vous avez souvent besoin d'une version de développement de packages, ou d'une version plus récente ou d'anciennes versions. Et puis ça ne marche plus. Il est donc recommandé d'installer votre propre version de Python que vous utilisez pour le développement et de créer des environnements de développement avec buildout ou virtualenv ou les deux, pour isoler le système python et l'environnement de développement les uns des autres.

+1

[pyenv] (https://github.com/yyuu/pyenv#readme) est un outil formidable pour gérer plusieurs versions de Python et [virtualenvs] (https://github.com/yyuu/pyenv-virtualenv#readme). –

17

Il existe deux camps complètement opposés: un en faveur des systèmes fournis par le système et un en faveur d'une installation séparée. Je suis personnellement dans le camp des "paquets système". Je vais fournir des arguments de chaque côté ci-dessous.

Paquets système Pro: le conditionneur de système se soucie déjà de la dépendance et de la conformité avec les stratégies système globales (telles que la disposition des fichiers). Les progiciels système fournissent des mises à jour de sécurité tout en ne tenant pas compte de la compatibilité, de sorte qu'ils sauvegardent parfois des correctifs de sécurité que les auteurs amont n'ont pas rétroportés. Les paquets système sont "sûrs" par rapport à. mises à jour du système: après une mise à niveau du système, vous avez probablement une nouvelle version de Python, mais tous vos modules Python sont toujours là s'ils viennent d'un gestionnaire de système. C'est une expérience personnelle avec Debian. Paquets du système Con: tous les logiciels ne peuvent pas être fournis en tant que progiciel ou pas dans la dernière version; l'installation de choses vous-même dans le système peut casser les paquets du système. Les mises à niveau peuvent casser votre application.

Installation séparée Pro: Certaines personnes (en particulier les développeurs d'applications Web) affirment que vous avez absolument besoin d'une configuration répétable, avec seulement les paquets que vous voulez, et complètement découplés du système Python. Cela va au-delà des paquets auto-installés par rapport aux paquets système, car même pour auto-installé, vous pouvez toujours modifier le système python; avec l'installation séparée, vous ne serez pas. Comme Lennart l'explique, il existe maintenant des chaînes d'outils dédiées pour supporter cette configuration. Les gens soutiennent que seule cette approche peut garantir des résultats reproductibles.

Installation séparée avec Con: vous devez vous occuper des corrections de bogues et vous devez vous assurer que tous vos utilisateurs utilisent l'installation séparée. Dans le cas des applications Web, cette dernière est généralement facile à réaliser.

+0

Assez juste. Je me demande toujours pourquoi setuptools et surtout rubygems et al ne s'installent pas dans/usr/local tree, qui est l'endroit pour des choses qui sont, bien, locales. Et bien. Pour ce que ça vaut, être un sysadmin aussi (n'est-ce pas beaucoup de choses?) Je préfère votre approche. Semble être très problématique avec python cependant.Tenir mon nez et aller le "chemin de l'environnement de développement" – chiggsy

+1

Je suis entièrement d'accord que les paquets de distribution sont préférables lors de l'installation dans le système Python. Mais pour le travail de développement, et aussi pour un système de production qui en fait beaucoup, vous aurez besoin d'environnements séparés pour les logiciels séparés (à moins qu'ils ne soient tous des paquets de distribution mis à jour et maintenus). –

+0

En tant que politique personnelle, je m'abstiens d'utiliser un logiciel pour lequel il n'y a pas de paquetage système, ou d'une version différente de celle fournie par le conditionneur système. Cela peut signifier que je ne peux pas utiliser beaucoup de paquets - une chance difficile; Je vais devoir réimplémenter des choses. Sur le plan positif, je suis limité à l'utilisation de logiciels «stables», donc je n'ai pas besoin de suivre chaque version de développement juste parce que certaines bibliothèques décident qu'il faut une version inédite d'un autre paquet. –