4

我刚刚在 pyenv 中使用 pip 成功安装了 PyEphem。但是,在导入时我收到:

ImportError:/python2.7/site-packages/ephem/_libastro.so:未定义符号:PyUnicodeUCS2_AsUTF8String

在环顾四周时,我看到它提到一些模块是“针对 Python”构建的关于 Unicode 并建议重新编译。我对 Python 和 Ubuntu 14.04 很陌生,虽然我相信这是我问题的答案,但我不知道重新编译是什么意思或如何去做。

4

1 回答 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 版本),但是自动编译的 PyEphem 版本在您的系统上运行时pip install不知何故感到困惑和未设置Py_UNICODE_WIDE,因此生成了预期为 UCS2 符号的 C 代码。

您的系统上是否有多个编译版本的 Python,其中一个版本的 Unicode 设置可能会意外影响系统 Python 的编译方式?

于 2014-08-10T20:40:28.137 回答