导入错误:ephem/_libastro.so 未定义符号: PyUnicodeUCS2_AsUTF8String

4 投票
1 回答
3429 浏览
提问于 2025-04-18 16:42

我刚刚在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的编译过程?

撰写回答