Python共享库-未找到Cheetah namemapper.so

Python共享库-未找到Cheetah namemapper.so,python,cheetah,Python,Cheetah,我正在使用Python Cheetah生成模板,但我无法让它使用已编译的\u namemapper.so库。我在CentOS 5.4上运行,安装了Python 2.4,使用的是Cheetah 2.4.3。我一辈子都无法让Cheetah使用\u namemapper。因此,我在安装过程中构建的文件: Filling conf/asterisk/sip.conf.ect -> conf/asterisk/sip.conf ... /usr/lib64/python2.4/site-packag

我正在使用Python Cheetah生成模板,但我无法让它使用已编译的
\u namemapper.so
库。我在CentOS 5.4上运行,安装了Python 2.4,使用的是Cheetah 2.4.3。我一辈子都无法让Cheetah使用
\u namemapper。因此,我在安装过程中构建的
文件:

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.
但是,我的共享库就在
NameMapper
模块的旁边:

$ 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
我已尝试将此目录添加到
/etc/ld.so.conf.d/python cheetah.conf
,但找不到
\u namemapper.so
共享库

有什么想法吗

已解决

谢谢@alex-b。原来我在32位机器上编译了Cheetah,并试图在64位机器上加载共享库。哦

>>> 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
来自Cheetah的
>>。\u名称映射器导入未找到
回溯(最近一次呼叫最后一次):
文件“”,第1行,是否在中?
ImportError:/usr/lib/python2.4/site-packages/Cheetah//\u namemapper.so:错误的ELF类:ELFCLASS32
然后我遇到了下一个问题:

>>> 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
来自Cheetah的
>>。\u名称映射器导入未找到
回溯(最近一次呼叫最后一次):
文件“”,第1行,是否在中?
ImportError:/usr/lib/python2.4/site-packages/Cheetah//\u namemapper.so:undefined symbol:PyUnicode\u FromFormat

结果是Cheetah在Python上工作得不是很好,有时使用strace打印打开的调用来跟踪Python使用的搜索路径是很有用的

如果您尝试导入的模块名为namemapper,下面将显示为namemapper模块搜索的路径

strace -e open python -c 'import namemapper'
这可能会为您提供一些关于您的模块未被使用的原因的线索

编辑:更正了上面strace命令行中模块名称的拼写

  • 在调用脚本时,确保
    \u namemapper.so
    位于
    sys.path
    中的一个路径中。可能是配置错误(可能是在某个地方安装了另一个python,例如在您的主目录中)

  • 如果库本身确实已加载,请尝试检查其版本是否正确。似乎Cheetah试图从_namemapper(Utils/namemapper.py:288)加载特定函数:

    如果此操作失败,
    C_VERSION
    将设置为False,这将向您发出此警告。尝试自己从
    \u namemapper
    导入这些符号,可能是您的
    \u namemapper。因此
    版本错误


  • 好把戏,谢谢。我尝试了这个方法,并确认在导入Cheetah.NameMapper:open(“/usr/lib/python2.4/site packages/Cheetah/_NameMapper.so”,O_RDONLY)=4 open(/usr/lib/python2.4/site packages/Cheetah/_NameMapper.so”,O_RDONLY))时找到了共享库=5>>>导入sys>>>sys.path…'/usr/lib/python2.4/site packages'.]和ll/usr/lib/python2.4/site-packages/Cheetah//u namemapper.so-rwxr-xr-x 1根目录28864 10月12日08:59/usr/lib/python2.4/site-packages/Cheetah//namemapper.so
    import sys
    sys.path
    
    try:
        from _namemapper import NotFound, valueForKey, valueForName, \
             valueFromSearchList, valueFromFrameOrSearchList, valueFromFrame
        C_VERSION = True
    except:
        C_VERSION = False