导入错误:ephem/_libastro.so 未定义符号: PyUnicodeUCS2_AsUTF8String
我刚刚在pyenv中成功通过pip安装了PyEphem。但是,当我尝试导入时,出现了以下错误:
ImportError: /python2.7/site-packages/ephem/_libastro.so: undefined symbol: PyUnicodeUCS2_AsUTF8String
我在网上查了一下,发现有人提到有些模块是“针对Python”构建的,特别是关于Unicode的部分,并建议重新编译。我对Python和Ubuntu 14.04还很陌生,虽然我觉得这可能是我问题的解决办法,但我不知道什么是重新编译,也不知道该怎么做。
1 个回答
5
这个符号 PyUnicode_AsUTF8String(value)
在 _libastro.c
文件中出现过一次,而在我的系统中,它的定义在这个文件里:
/usr/include/python2.7/unicodeobject.h
在这里,它可以有两种别名:
#ifndef Py_UNICODE_WIDE
# ...
# define PyUnicode_AsUTF8String PyUnicodeUCS2_AsUTF8String
# ...
#else
# ...
# define PyUnicode_AsUTF8String PyUnicodeUCS4_AsUTF8String
你的错误信息听起来像是你的系统Python是用4字节宽的Unicode字符串编译的(所以链接器找不到这个函数的UCS2版本),但是当你运行 pip install
时,自动编译的PyEphem版本似乎搞混了,取消了 Py_UNICODE_WIDE
的设置,因此生成的C代码期待的是一个UCS2的符号。
你系统上是否有多个编译版本的Python,其中一个版本的Unicode设置可能意外影响了你系统Python的编译过程?