lundi 28 février 2011

Environnements de développement Python sous Ubuntu

Introduction
Python est un langage de programmation agréable et aux nombreuses ramifications (y compris sous Windows).
Faire quelques bidouilles avec gEdit et l'interpréteur reste à la portée de tout un chacun.
Mais si l'on désire pousser l'expérience un peu plus loin, il faut envisager l'installation et l'utilisation d'un environnement de développement.

Cet article se focalise principalement sur l'installation et la configuration de Eclipse (y compris greffon et projet Python) pour faire des développements Python.
Ainsi, l'article abordera:
  • L'activation de l'interpréteur Python dans le menu "Application d'Ubuntu".
  • Une présentation succincte de l'excellent Wing qui est malheureusement payant.
    Pour plus d'information à ce sujet, tout un chacun trouvera son bonheur sur le site officiel WingWare.
  • Un guide d'installation de l'environnement de développement Eclipse
  • L'installation et la configuration du Greffon pyDev permettant de faire des développements Python sur Eclipse.
  • La création et la configuration d'un premier projet Python sur Eclipse.

Installer Python sur Ubuntu
Python est devenu un langage de programmation très populaire. Sa notoriété à largement dépassé les frontières des systèmes Linux/Unix.
 
Sur Ubuntu, il n'est pas nécessaire d'installer Python car il est installé par défaut (du moins dans la version 10.10).
Par contre, si l'interpreteur et la console interactive sont présents, la console n'est pas accessible depuis le menu "Applications" de Ubuntu.

Afficher Python dans le menu Application
Effectuer les opérations suivantes pour afficher la console de Python dans le menu principal:
  • Menu Système | Préférence | Menu principal
  • Sélectionner le menu programmation
  • Cocher l'élément Python

Activer l'interpréteur Python dans le menu "Applications"

Environnements de développements Python
Il existe de nombreux environnements de développement pour Python.
Je vais cependant me limiter à Eclipse tout en glissant un mot à propos de Wing.

Wing
Par le passé, j'ai eu l'occasion de découvrir Wing en faisant mes premiers développements Python sous Windows.
Wing est un environnement de niveau professionnel écrit en Python pour les développeurs Python.
Je l'ai utilisé durant toute sa période d'essai et franchement, s'il me fallait un jour entamer un travail en tant que professionnel, c'est certainement vers Wing que je me tournerai.
Le problème de Wing, c'est qu'il est payant. A savoir +/- 40$ la licence personnelle et +/- 180$ pour la licence professionnelle (gloups!).

Eclipse
Plus récemment, j'ai eu l'occasion d'installer Eclipse pour tester quelques développements sous Android.
Eclipse est développé en Java et supporte de nombreux langages de développements.
Comme je dispose d'éclipse sur mon PC, je vais donc tenter de faire quelques développements Python depuis cette plateforme.

Installer Eclipse à la main:
Pour savoir comment j'ai installé le Java Development Kit d'Oracle et Eclipse sur Ubuntu, reportez-vous à l'article "Développement Android sous Ubuntu".
La version Oracle étant un pré-requis pour le développement Android, c'est vers cette installation manuelle que je m'étais tourné.

Installer Eclipse avec la Logithèque Ubuntu:
Il est possible d'installer directement Eclipse et la version Sun du JRE Java (Java Runtime Environment) depuis la logithèque Ubuntu.
L'environnement Java est automatiquement intallé en même temps que l'installation d'éclipse (ou FreeMind) depuis la logithèque.
Note personnelle: J'ai testé l'installation d'éclipse et de Java depuis la logithèque Ubuntu lors du remplacement de mon PC portable.
J'ai quand même l'impression que cette version de Java semble moins réactive que la version Oracle (pourtant installé la première fois sur une machine moins puissante).

Installer le greffon Python sur Eclipse
pyDev
pyDev est un greffon (plugin) Eclipse permettant de faire des développements en Pyhton. Il est ainsi possible de profiter d'un debugger, d'un "code completion" et du formatage de syntaxe.
PyDev permet également de conduire des développement "Google App Engine" et DJango.
DJango est un framework python permettant de développement des applications web performantes. Pour plus d'information, voir djangoproject.com ou django-fr.org

Installer pyDev
Voici la marche à suivre:
  • Démarrer Eclipse
  • Menu Help | Install new software ...
  • Saisir l'url du plugin pyDev http://pydev.org/updates/ et sélectionner pyDev uniquement (1*) et installer le plug-in (bouton Finish)
  • Redémarrer Eclipse.

1*) pyDev Mylyn concerne l'intégration de développement de type Mylyn (task oriented developpement). Il reclame le greffon Mylyn.

Connaître la version de son interpreteur Python
  • Démarrer un terminal
  • Taper la commande "python", la version apparaît dans l'entête de l'interpreteur.

domeu@domeu-Lenovo:~$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>


Configurer l'interpreteur Python dans Eclipse
Lorsque Eclipse est redémarré, effectuer les opérations suivantes:
  • Menu "Windows | Preference"
  • Sélectionner le noeud: pyDev + interpreter Python
Il est possible d'utiliser soit le bouton "Auto-Config" qui fonctionne en général assez bien, soit d'ajouter un nouvel interpréteur manuellement.
  • Ajouter un nouvel interpreteur:
    • Pour le nom utiliser par exemple Python266 pour la version 2.6.6 de Python.
    • Pour l'exécutable, sélectionnez /usr/bin/python sur Ubuntu (sous Windows, ce sera plutôt C:\Python\python.exe).
    • Sélectionner tous les répertoires proposés pour l'initialisation du PythonPath 
Consulter la section Interpreter du manuel de pyDev pour plus d'information sur la configuration de l'interpreteur Python dans Eclipse.

Attention: dans Eclipse, la définition des interpréteurs tel que décrit ci-dessus est propre au workspace (répertoire de travail) sélectionné lors du lancement d'eclipse.
Si vous changez de répertoire de travail, il faudra aussi redéfinit l'interpréteur Python à utiliser.

Développement Python sur Eclipse
Voici la description de la création et de la configuration d'un premier projet Python dans Eclipse.
Si Eclipse est un environnement puissant, il est aussi un peu plus complexe.
Un petit guide de prise en main est toujours le bien venu pour démarrer rapidement sans dépenser inutilement son énergie.

Dans Eclipse:
1) Sélectionner le menu File | New | Project...
2) Sélectionner un projet de type pyDev + pyDev Project
3) Dans la configuration du projet:
  • Donner lui un nom, par exemple "myFirstPythonProject"
  • Sélectionner la bonne version de la syntaxe (dans notre cas, 2.6 puisqu'il s'agit de l'interpreter python 2.6.6)
  • Eventuellement sélectionner un interpreteur spécifique (plutôt que d'utiliser l'interpreteur par défaut)
  • Ne pas référencer d'autres projets et cliquer sur le bouton Finish
Création d'un projet Python (pyDev project)
Configuration du projet
Attention: Dans Eclipse, la définition des interpréteurs tel qu'effectué dans le point "Configurer l'interpreteur Python dans Eclipse" est propre au workspace (répertoire de travail) choisit lors du lancement d'eclipse.
Si vous changez de répertoire de travail, il faudra redéfinit l'interpréteur Python à utiliser.

4) Créer un nouveau fichier source
  • Menu File | New | file...
  • Sélectionner le répertoire src du nouveau project myFirstPythonProject
  • Nommer le fichier, par exemple myFPP.py
Ajouter un fichier source au projet Python

5) Taper le petit bout de code suivant:
a = 123
b = 12
c = a + b
print( "%i + %i = %i" % (a,b,c) )

6) Configurer l'environnement d'exécution pour ce projet
  • Sélectionner le "Run Configuration..." (cfr captures d'écrans ci-dessous)
  • Sélectionner le noeud "Python Run" + presser le bouton "new configuration" (cfr capture d'écrans ci-dessous)
  • Nommer la configuration "myFPP Run"
  • Remplir les paramètres de la section "Main":
    • Sélectionner le projet myFirstPythonProject
    • Sélectionner le module principal myFPP.py
  • Remplir les paramètres de la section "Interpreter"
    • Choisir l'interpreteur par défaut ou opter pour l'interpreter Python266 définit précédemment.
  • Remplir les paramètres de la section "Common"
    • Cocher "Display in favorite menu" pour Debug et Run
Définir un "Run Configuration"
Définition d'une nouvelle configuration "Run config."
Options "Common" du "Run config."
  • Confirmer la sauvegarde

7) Exécuter le programme
Il ne reste plus qu'à exécuter le petit bout de programme avec le "Run Configuration" qui vient d'être créé.
Le résultat s'affiche dans la console d'Eclipse.

Sources

jeudi 24 février 2011

Guide pour OpenOffice Writer - comment passer une seule page en mode paysage

Les habitués de Microsoft Word remarqueront vite qu'il n'est pas aisé de faire passer une seule page du document en mode paysage.

Et pour cause, il faut préalablement définir un style de page "mode paysage" car il n'existe pas par défaut.
Par la suite, il suffit d'insérer un saut de page en mentionnant le style "mode paysage".

Le Guide de l'utilisateur d'OpenOffice (en français) explique très bien comment créer un tel style.

http://fr.openoffice.org/Documentation/Guides/Guide_Writer.pdf

vendredi 18 février 2011

Comment renommer l'utilisateur principal d'Ubuntu

Parce qu'il ne faut jamais perdre une référence vers un article utile :-)
Testé avec succès, nécessite néanmoins de redémarrer la machine.

Lire l'article de Chris Jakeway "How to rename a user"

mercredi 16 février 2011

Ajouter des fonts à Ubuntu

Un précédent article "Installer les fonts Microsoft sur Ubuntu" expliquait comment installer quelques fonts bien utiles sur Ubuntu.

Cet article ci montrera comment télécharger des fonts libres et les installer sur Ubuntu.

Télécharger des fonts libres
Le site DaFont dispose de milliers de fonts gratuites classées par catégorie (Fantaisie, Gothique, Basique, Techno, Symboles, Fête, Script, Barecode).
Le choix est simplement hallucinant et le site dispose d'une excellente présentation permettant de faire son choix assez facilement.
Les fonts de DaFont sont téléchargeables sous forme d'archive.

Voici quelques exemples du catalogue capturés ci et là dans la collection.









Installer une font étape par étape
1) télécharger la font
En première étape, nous allons télécharger la font "Jellyka - Love and Passion" de Jellyka Nerevan.

Jellyka - Love and Passion
Cette police de caractère réservée à un usage personnel est bien entendu disponible sur DaFont (ici, dans la catégorie Fêtes/Valentin).

Télécharger Jellyka - Love and Passion depuis DaFont

Cette opération enregistre l'archive jellyka_love_and_passion.zip dans le répertoire des téléchargement (~/Téléchargements).

2) Démarrer une terminal
Démarrer une session terminal.
A partir de maintenant, toutes les autres opérations se feront dans le terminal.

Se placer dans le répertoire de téléchargement.
cd ~/Téléchargements

3) Extraire la font de l'archive
file-roller jellyka_love_and_passion.zip --extract-here

Cela crée un sous répertoire jellyka_love_and_passion.
Si l'on explore le nouveau répertoire (ls ./jellyka_love_and_passion), on remarque la présence du fichier font Love_and_Passion.ttf .

4) Placer la nouvelle font avec les fonts du système
Les fonts du systèmes sont stockées dans le répertoire protégé /usr/share/fonts/truetype .
Placer une nouvelle font dans ce répertoire consiste à copier le répertoire de la font  jellyka_love_and_passion dans  /usr/share/fonts/truetype .

Il faut utiliser la commande:
sudo cp -R ~/Téléchargements/jellyka_love_and_passion /usr/share/fonts/truetype

5) Rafraîchir le cache des polices de caractère
sudo fc-cache -fv

6) Démarrer OpenOffice et vérifier la présence de la nouvelle font

Un petit raccourci
Il est possible de demander au file-roller de faire l'extraction directement dans le répertoire /usr/share/font/truetype .
Voici un exemple basé sur la font LearningCurve (téléchargeable directement ici sur DaFont).

cd ~/Téléchargements
sudo file-roller learning_curve.zip --extract-to=/usr/share/fonts/truetype
sudo fc-cache -fv

La vie plus facile
Pour terminer, j'ai quand même quelques PC qui fonctionne sous Ubuntu à la maison.
Plutôt que d'installer au coup par coup les différentes fonts dont j'ai besoin, j'ai fini par écrire un petit script d'installation bash (mon premier bash... quelle langage barbare).
Il n'installe pas encore grand chose mais un peu de patience, cela viendra :-).

download-fonts

mardi 15 février 2011

FullCircle magazine - Un magazine francophone gratuit dédié à Ubuntu

The Full Circle Magazine (fr) est un magazine dédié à Ubuntu.
D'abord rédigé en anglais, ce dernier est traduit chaque mois par une équipe de traduction qui le re-publie alors sur sa propre page.

Source: FullCircle-mag.fr


Bien qu'au contenu entièrement gratuit, Full Circle magazine reste dans la lignée des magazines de facture professionnelle.
Aujourd'hui au numéro 44, il contient de nombreux articles allant du tout publique digne d'intérêt à l'article plus technique.

Une lecture à conseiller.

lundi 14 février 2011

10000 Visites!

Source: L'univers de Mamini

Quelle progression depuis février 2010 dernier (date de référencement).
10.000 visites en à peine 10 mois pour un blog à orientation technique c'est pas si mal que cela.
Merci à tous, vous démontrez que mes convictions exprimées dans l'article "Utilisation des blogs pour consolider les connaissances d'entreprise" sont, en fin de compte, assez justes.


Top 5 des articles les plus lus:
Bonne lecture à tous.

samedi 12 février 2011

psutil: la bibliothèque Python pour monitorer les processus

Easy install / PIP
Si l'outil easy_install ou PIP (recommandé) n'est pas encore installer, référez-vous à l'article "Installer easy_install sous Ubuntu".
Cet outil est indispensable pour installer facilement des bibliothèques/paquets Pyhton.

La librairie psutil
La bibliothèque psutil de Pyhton contient toute une série d'utilitaires permettant de récupérer des informations relatives aux processus en court de fonctionnement sur le système.
Psutil est compatible avec de nombreux systèmes d'exploitation, cela inclus également Mac OS X et Windows :-)

Ne pas oublier d'utiliser SUDO pour installer une bibliothèque Python avec easy_install ou pip car le processus d'installation accède à des répertoires qui sont protégés en temps normal.

Utilisez la commande suivante pour installer psutil:
sudo easy_install psutil
sudo pip install psutil

Aide sur psutil
>>> import psutil
>>> help( psutil )
Voir aussi le projet de documentation sur Google Code (fourni également des exemples de structure).

Utiliser psutil
Lister tous les processus en cours de fonctionnement via un itérateur
>>> import psutil
>>> iter = psutil.process_iter()
>>> iter
<generator object process_iter at 0xb760d554>
>>> for process in iter:
...     print process.name

Voici un autre exemple qui ne s'intéresse qu'aux processus consommant plus de 4% du temps cpu.
>>> def filterCpu( process ):
...     return process.get_cpu_percent() > 4
... 
>>> pslist = psutil.get_process_list()
>>> consuming_pslist = filter( filterCpu, pslist )
>>> for process in consuming_pslist:
...     print process.name + " " + str( process.get_cpu_percent() )
...
plugin-container 27.3
gedit 0.0

Dans le résultat ci-dessus le pourcentage cpu affiché pour gEdit est de 0%, ce qui semble erroné de premier abord.
S'il en est ainsi, c'est parce qu'au moment de l'affichage, le processus ne consommait plus que 0% de cpu alors qu'il en consommait plus de 4% au moment de la constitution de la liste consuming_pslist.

Il faudrait donc capturer le pourcentage cpu pour pouvoir l'afficher.
Cela se fait à l'aide d'une "expression list" constituant une liste de tuple (l'object Process + capture de l'usage cpu).
Par exemple:
capturedCpu_pslist = [ (process, process.get_cpu_percent() ) for process in psutil.get_process_list() ]

>>> def filterCpu( processpro ):
...     return process.get_cpu_percent() > 4
... 
>>> capturedCpu_pslist = [ (process, process.get_cpu_percent() ) for process in psutil.get_process_list() ]
>>> def filterCapturedCpu( processCpuTuple ): 
...     return processCpuTuple[1] > 4
... 
>>> consumingCpu_pslist = filter( filterCapturedCpu, capturedCpu_pslist )
>>> for process, capturedCpu in consumingCpu_pslist:
...     print( '%s  capturedCpu=%d   currentCpu=%d' % ( process.name, capturedCpu, process.get_cpu_percent() ) )
... 
rhythmbox  capturedCpu=9   currentCpu=0
plugin-container  capturedCpu=28   currentCpu=18
python  capturedCpu=9   currentCpu=0

Quelques informations récupérées via psutil
Voici quelques exemples exploitant les informations de psutil tout en faisant la correspondance avec des commandes à exécuter dans le terminale.
Cela permet de se rendre compte de la stricte correspondance entre les informations de psutil et le fonctionnement du système d'exploitation.

Utilisation de la mémoire physique
>>> psutil.TOTAL_PHYMEM/1024 # transform bytes to kbytes3056648L
>>> psutil.used_phymem()/1024
1798832L
>>> psutil.avail_phymem()/1024
1257736
correspond aux informations de la commande free (section mem)
domeu@domeu-Lenovo:~$ free
             total       used       free     shared    buffers     cached
Mem:       3056648    1798504    1258144          0     162528     965768
-/+ buffers/cache:     670208    2386440
Swap:     12286972          0   12286972

Utilisation de la mémoire virtuelle
>>> psutil.total_virtmem()/1024 # transform bytes to kbytes12286972L
>>> psutil.used_virtmem()/1024
0L
>>> psutil.avail_virtmem()/1024
12286972L

correspond aux informations de la commande free (section swap)
domeu@domeu-Lenovo:~$ free
             total       used       free     shared    buffers     cached
Mem:       3056648    1795472    1261176          0     162400     963608
-/+ buffers/cache:     669464    2387184
Swap:     12286972          0   12286972

Utilisation de la mémoire d'un processus
Commençons par trouver le pid (process id) du processus python avec la commande suivante:
ps -ef | grep python

domeu@domeu-Lenovo:~$ ps -ef | grep python
UID        PID  PPID  C STIME TTY          TIME CMD
domeu    18958 15312  0 14:48 pts/0    00:00:02 python

Dans Pyhton, il est possible de retrouver l'object Process via un filtre sur psutil.get_process_list() OU en créant un object Process en lui passant le pid en paramètre.

>>> pyProcess = psutil.Process( 18958 )
>>> pyProcess.name
'python'
>>> pyProcess.get_cpu_percent()
0.0
>>> pyProcess.get_memory_percent()
0.18765654403123946
>>> pyProcess.get_memory_info() # RSS (Resident Set Size=process memory + data), VSZ (all memory, included library, cache, etc)meminfo(rss=5873664, vms=11493376)

Ce qui correspond aux informations de la commande
ps aux | grep python

domeu@domeu-Lenovo:~$ ps aux | grep python
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
domeu    18958  0.0  0.1  11220  5736 pts/0    S+   14:48   0:02 python

Utilisation avancée
Parmi les utilisations avancées de psutil, il y a l'opportunité de surveiller de lister les fichiers et les connections ouvertes par un processus.
Le site officiel et la documentation de l'API demontre d'ailleurs clairement cette capacité de psutil


Ressources