Après avoir mis à jour ma distribution vers Ubuntu 10.04 j’ai dû recompiler manuellement un python 2.4 pour faire tourner mes projets Plone 3. Mais voilà en lançant mon instance, je me retrouve avec l’erreur suivante: “ImportError: … .so: undefined symbol: PyUnicodeUCS4_AsEncodedString”…

Solution : supprimer les eggs concernés et les recompiler

En effet il semble bien sur le UCS de mon nouveau python est différent de l’ancien.

Les eggs précompilés (contenant des fichiers *.so) doivent être supprimés puis ré-installés/compilés en relançant le buildout (par exemple).

Exemple de commande permettant de trouver les eggs concernés :

find /home/<your-user>/.buildout/eggs/ -name '*.so' 
    | sed -re "s:(.*/eggs/[^/]*).*:\1:g" 
    | sort -u

Comment connaître le UCS utilisé ?

python -c "import sys; print(sys.maxunicode<66000) and 'UCS2' or 'UCS4'"

Qu’est-ce que sys.maxunicode ? Je cite: “An integer giving the largest supported code point for a Unicode character. The value of this depends on the configuration option that specifies whether Unicode characters are stored as UCS-2 or UCS-4.” (cf. http://docs.python.org/py3k/library/sys.html#sys.maxunicode)