Quel est l'environnement Python disponible ?

python -c "import sys; print sys.version"
2.4.5 (#1, Mar 29 2012, 10:34:03)
[GCC 4.3.5]

Karotz dispose donc sur d'un environnement Python 2.4.5 compilé le 29 mars 2012 avec GCC 4.3.5 (GNU Compiler Collection ou le compilateur utilisé à l'époque pour transformer le code source Python en binaire exécutable pour le processeur ARM920T du Karotz).  D'après mes recherches l'environnement Python était disponible d'origine sur Karotz, il ne s'agit pas d'un ajout de OpenKarotz.  Mais certaines bibliothèques ont peut être été ajoutées.

 

Quels sont les modules disponibles ?

ls /usr/lib/python2.4/

Cet environnement Python dispose d'une belle bibliothèque standard :

Réseau & Web :

  • urllib.py, urllib2.py, urlparse.py - Requêtes HTTP
  • httplib.py - Client HTTP bas niveau
  • ftplib.py - Client FTP
  • socket.py - Sockets réseau
  • BaseHTTPServer.py, SimpleHTTPServer.py, CGIHTTPServer.py - Serveurs HTTP
  • xmlrpclib.py, SimpleXMLRPCServer.py - XML-RPC
  • cookielib.py - Gestion cookies

Données :

  • simplejson - JSON
  • csv.py - Fichiers CSV
  • xml - Parsing XML
  • ConfigParser.py - Fichiers de config
  • pickle.py - Sérialisation objets

Système :

  • os.py - Interaction système
  • subprocess.py - Exécution commandes externes
  • shutil.py - Opérations fichiers
  • threading.py - Multi-threading
  • tempfile.py - Fichiers temporaires
  • gzip.py, tarfile.py, zipfile.py - Compression

Utilitaires :

  • re.py - Expressions régulières
  • random.py - Nombres aléatoires
  • base64.py - Encodage base64
  • email - Gestion emails

Un détail intéressant est que simplejson (2.0.7) a probablement été intégré par Mindscape dans le firmware car il ne fait pas partie des modules natifs de Python 2.4 (arrivé seulement avec Python 2.6).  Mindscape l'a probablement intégré car le lapin devait communiquer en JSON avec leurs serveurs.

Il existe également des modules compilés.

ls /usr/lib/python2.4/lib-dynload/

Voici quelques modules intérressants à citer :

Module Intérêt pour le Karotz
_socket.so Essentiel pour les communications réseau.
zlib.so Compression.
pyexpat.so Parsing XML rapide.
select.so Pour gérer plusieurs connexions simultanées.
md5.so, sha.so Vérification de l'intégrité.
datetime.so Gestion du temps.
cPickle.so Sauvegarde rapide d'états/configurations.


On peut déjà remarquer l'absence de modules qui auraient pu être utiles : Aucun module pour des connexions sécurisées (ssl), pour des bases de données, pour des appels directs aux librairies C.

 

Espace disque

Combien de place prend cet environnement Python sur le lapin ?

du -sh /usr/lib/python2.4/

8.5M /usr/lib/python2.4/
# Espace disque disponible
-bash-4.1# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 7.7M      7.7M         0 100% /
none                     29.4M         0     29.4M   0% /dev
/dev/mtdblock6          234.0M     84.3M    149.7M  36% /usr
tmpfs                    29.4M         0     29.4M   0% /dev/shm

On dispose de plusieurs dizaines de Mo sur /usr.  C'est déjà à cet endroit que Python est installé.  Un upgrade serait donc techniquement possible.


Un upgrade serait-il intéressant ?

J'utilise depuis peu Python pour beaucoup de développements dans mes projets personnels.  C'est un language que j'aime bien utiliser et qui permet beaucoup de choses.

Dans l'environnement actuel du Karotz, il y a quand même certaines choses qui manquent :

  • Pas de with statement
  • Un syntaxe ancienne pour la gestion des exceptions notamment
  • Pas de compréhension des dictionnaires
  • Pas de format() moderne (Exemple : f"Hello {name}"). 

Passer à Python 2.7 (la dernière version stable de Python 2) apporterait déjà le with, le json natif, la compréhension des dictionnaires, le format().  La compatibilité des scripts existants serait probablement assurée mais à vérifier.

Passer à Python 3 pourrait évidemment être intéressant mais c'est beaucoup plus risqué au niveau de la compatibilité des scripts existants, la cross-compilation serait certainement complexe et au niveau de l'espace disque il est probable que ce soit aussi plus lourd.

Mon choix se porterait donc logiquement sur Python 2.7 qui donnerait un petit coup de jeune à mon Karotz.

Il faudrait donc :

  • Cross-compiler Python 2.7 pour l'architecture ARM920T. 
  • Vérifier les bibliothèques dont Python a besoin et les cross-compiler aussi.
  • Optionnel : Compiler OpenSSL pour avoir HTTPS
  • Vérifier la taille nécessaire.
  • Transférer les binaires sur /usr et configurer les liens symboliques
  • Tester si tout fonctionne

Est-ce que vous avez déjà étudié la question ? 

Que pensez-vous d'un upgrade de Python pour le Karotz, est-ce que cela vous semble utile ?

 

 

Aucun commentaire