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

Pil*_*tew 4 python unicode importerror undefined-symbol pyephem

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

ImportError:/python2.7/site-packages/ephem/_libastro.so:undefined symbol:PyUnicodeUCS2_AsUTF8String

在环顾四周时,我看到它提到某些模块是针对Unicode构建的"针对Python"并建议重新编译.我是Python和Ubuntu 14.04的新手,虽然我相信这是我的问题的答案,但我不知道重新编译意味着什么或如何做.

Bra*_*des 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
Run Code Online (Sandbox Code Playgroud)

您的错误消息听起来好像您的系统Python被编译为使用4字节宽的Unicode字符串(因此链接器无法在其中找到此函数的UCS2版本),但是自动编译的PyEphem版本在你的系统上,当你以pip install某种方式运行困惑和未设置Py_UNICODE_WIDE,从而生成预期为UCS2符号的C代码.

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