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 HTTPhttplib.py- Client HTTP bas niveauftplib.py- Client FTPsocket.py- Sockets réseauBaseHTTPServer.py,SimpleHTTPServer.py,CGIHTTPServer.py- Serveurs HTTPxmlrpclib.py,SimpleXMLRPCServer.py- XML-RPCcookielib.py- Gestion cookies
Données :
simplejson- JSONcsv.py- Fichiers CSVxml- Parsing XMLConfigParser.py- Fichiers de configpickle.py- Sérialisation objets
Système :
os.py- Interaction systèmesubprocess.py- Exécution commandes externesshutil.py- Opérations fichiersthreading.py- Multi-threadingtempfile.py- Fichiers temporairesgzip.py,tarfile.py,zipfile.py- Compression
Utilitaires :
re.py- Expressions régulièresrandom.py- Nombres aléatoiresbase64.py- Encodage base64email- 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
withstatement - 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
/usret 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 ?
