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

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 ,但未找到 _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

然后我遇到了下一个问题:
>>> 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 在 Python

最佳答案

  • 确保在调用脚本时 _namemapper.so 位于 sys.path 中的路径之一。可能是配置错误(可能是安装在某处的另一个 python,例如,在您的主目录中)。
    import sys
    sys.path
    
  • 如果确实加载了库本身,请尝试检查它的版本是否正确。 Cheetah 似乎试图从 _namemapper (Utils/NameMapper.py:288) 加载特定函数:
    try:
        from _namemapper import NotFound, valueForKey, valueForName, \
             valueFromSearchList, valueFromFrameOrSearchList, valueFromFrame
        C_VERSION = True
    except:
        C_VERSION = False
    

    如果失败,C_VERSION 将设置为 False,这会向您发出此警告。自己尝试从_namemapper中导入这些符号,可能是你的_namemapper.so版本不对。
  • 关于Python 共享库 - Cheetah namemapper.so 未找到,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4328046/

    10-13 09:49