ImportError: [...].so: undefined symbol: PyUnicodeUCS4_AsEncodedString
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)