【问题标题】:import error: ephem/_libastro.so undefined symbol: PyUnicodeUCS2_AsUTF8String导入错误:ephem/_libastro.so 未定义符号:PyUnicodeUCS2_AsUTF8String
【发布时间】:2014-10-03 03:26:12
【问题描述】:
我刚刚在 pyenv 中使用 pip 成功安装了 PyEphem。但是,在导入时我收到:
ImportError:/python2.7/site-packages/ephem/_libastro.so:未定义符号:PyUnicodeUCS2_AsUTF8String
在环顾四周时,我看到它提到一些模块是“针对 Python”构建的 Unicode 并建议重新编译。我对 Python 和 Ubuntu 14.04 还很陌生,虽然我相信这是我问题的答案,但我不知道重新编译是什么意思或如何去做。
【问题讨论】:
标签:
python
unicode
importerror
undefined-symbol
pyephem
【解决方案1】:
符号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 的编译方式?