我刚刚在pyenv中使用pip成功安装了PyEphem。但是,在导入时我会收到:
ImportError:/python2.7/site-packages/ephem/_libastro.so:undefined symbol:PyUnicodeUCS2_AsUTF8String
环顾四周,我看到它提到了一些模块是针对Python构建的,并且#34;关于Unicode并建议重新编译。我对Python和Ubuntu 14.04都很陌生,虽然我相信这是我的问题的答案,但我不知道重新编译的意思或方法。
答案 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的编译方式?