samedi 5 mars 2011

PyPM, le gestionnaire de packages Python d'ActiveState

La société Canadienne propose au sein de sa propre distribution Python, ActivePython, un gestionnaire de package compilé pour Python : PyPM. C'est un gain de productivité considérable car cela dispense de compiler les extensions C.
Les utilitaires d'installation source-based tels que pip ou easy_install sont pratiques pour les packages pur Python, mais dès lors qu'un package requiert la compilation d'une extension C... les choses peuvent se compliquer.

Naturellement, cela présuppose d'avoir un compilateur, par exemple gcc sous Linux ou msvc sous Windows. Et même s'il est vrai qu'une compilation réussie fait toujours plaisir, certaines erreurs de compilation peuvent mettre nos nerfs à rude épreuve selon les packages et selon les plateformes. Il y a également des cas où l'installation du package se déroule sans erreurs mais avec des warning ; et alors certaines options ne sont pas disponibles car certaines dépendances ne sont pas présentes (je pense à PIL avec qui j'ai eu des problèmes sous Debian et sous Win7).

Passons à la pratique en installant virtualenv :

C:\>pypm install virtualenv
The following packages will be installed into "%APPDATA%\Python" (2.6):
virtualenv-1.5.1
Get: [pypm-free.activestate.com] virtualenv 1.5.1
Installing virtualenv-1.5.1
Fixing script %APPDATA%\Python\Scripts\virtualenv-script.py

On crée l'environnement virtuel :

C:\>md \env
C:\>virtualenv \env
New python executable in \env\Scripts\python2.6.exe
Also creating executable in \env\Scripts\python.exe
Installing distribute.....................................done.

Vous l'aurez compris, PyPM est compatible avec virtualenv. Tout comme pip, cela se fait via l'argument -E :

C:\>pypm -E \env install django
The following packages will be installed into "C:\env" (2.6):
django-1.2.5
Hit: [pypm-free.activestate.com] django 1.2.5
Installing django-1.2.5
Fixing script C:\env\Scripts\django-admin.py

Et alors que PIL requiert une compilation laborieuse avec des gestionnaires source-based, PyPM télécharge directement le binaire pour la plateforme, ici un bon vieux XP :


C:\>pypm -E \env install pil
The following packages will be installed into "C:\env" (2.6):
pil-1.1.7~2
Hit: [pypm-free.activestate.com] pil 1.1.7~2
Installing pil-1.1.7~2
Fixing script C:\env\Scripts\pilconvert.py
Fixing script C:\env\Scripts\pildriver.py
Fixing script C:\env\Scripts\pilfile.py
Fixing script C:\env\Scripts\pilprint.py

On obtient la liste des packages installés via la commande list. Si vous travaillez avec des environnements virtuels pensez bien à préciser quel environnement vous souhaitez interroger :


C:\>pypm list
virtualenv 1.5.1 Virtual Python Environment builder


C:\>pypm -E \env list
django 1.2.5 A high-level Python Web framework that encourages rapid development
pil 1.1.7~2 Python Imaging Library

La suppression d'un package se fait avec la commande uninstall ou avec un de ses alias del, delete, remove ou rm. Avouez que rm est plus sympa :)

Ne négligez pas la recherche de package, on peut trouver par hasard des projets dont on ne soupçonnait pas l'existence. C'est comme ça que j'ai découvert hotpotato un "compilateur" Python vers PHP... plutôt surprenant.

Enfin, PyPM se veut compatible PEP 376 ce qui assurera une compatibilité avec easy_install et pip lorsque la proposition sera finalisée.

En conclusion, PyPM est un outil puissant et très pratique. Cependant pip a encore de beaux jours devant lui car PyPM n'est pas open source. Notez qu'ActivePython inclut pip et easy_install en plus de PyPM.

Liens utiles :
Index PyPM consultable en ligne
ActivePython Community Edition (i.e. gratuite)