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

时间:2014-08-09 23:13:40

标签: python unicode importerror undefined-symbol pyephem

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

  

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

环顾四周,我看到它提到了一些模块是针对Python构建的,并且#34;关于Unicode并建议重新编译。我对Python和Ubuntu 14.04都很陌生,虽然我相信这是我的问题的答案,但我不知道重新编译的意思或方法。

1 个答案:

答案 0 :(得分: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的编译方式?