I’m using Python Cheetah for template generation and I can’t get it to use the compiled _namemapper.so library that is installed. I am running on CentOS 5.4 with Python 2.4 installed, using Cheetah 2.4.3. I cannot for the life of me get Cheetah to use the _namemapper.so file that I built during install:
Filling conf/asterisk/sip.conf.ect -> conf/asterisk/sip.conf ...
/usr/lib64/python2.4/site-packages/Cheetah/Compiler.py:1508: UserWarning:
You don't have the C version of NameMapper installed! I'm disabling Cheetah's
useStackFrames option as it is painfully slow with the Python version of NameMapper.
You should get a copy of Cheetah with the compiled C version of NameMapper.
However, I have the shared library sitting right next to the NameMapper modules:
$ ls -ltr /usr/lib64/python2.4/site-packages/Cheetah/ | grep -i namemap
-rw-r--r-- 1 root root 12376 Jul 1 20:17 NameMapper.py
-rwxr-xr-x 1 root root 36982 Dec 1 09:55 _namemapper.so
-rw-r--r-- 1 root root 12541 Dec 1 09:55 NameMapper.pyc
I’ve tried adding this directory to /etc/ld.so.conf.d/python-cheetah.conf, and the _namemapper.so shared library is not found.
Any ideas?
SOLVED
Thanks @alex-b. Turns out I had compiled Cheetah on a 32-bit machine and was attempting to load the shared library on a 64-bit machine. D’oh!
>>> from Cheetah._namemapper import NotFound
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: /usr/lib/python2.4/site-packages/Cheetah/_namemapper.so: wrong ELF class: ELFCLASS32
Then I ran into the next problem:
>>> from Cheetah._namemapper import NotFound
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: /usr/lib/python2.4/site-packages/Cheetah/_namemapper.so: undefined symbol: PyUnicode_FromFormat
And it turns out that Cheetah doesn’t work so well on Python <= 2.6, so I will be upgrading.
Make sure that
_namemapper.sois in one of the paths insys.pathwhen your script is invoked. It’s possible that something is misconfigured (can be another python installed somewhere, for example, in your home directory).If the library itself is indeed loaded, try checking if it’s of the correct version. It seems that Cheetah tries to load particular functions from _namemapper (Utils/NameMapper.py:288):
If this fails,
C_VERSIONis set to False, which gives you this warning. Try importing these symbols from_namemapperyourself, it may be that your_namemapper.soversion is wrong.