0

我正在尝试python-chess在 Ubuntu 13.04 上将软件包安装到 Python 3.3。这是 github 的链接(https://github.com/niklasf/python-chess),也可以使用pip.

当我将它安装到 Python 2.7(使用pip或使用setup.py源代码)时,一切正常,但是当我尝试将其安装到 Python 3.3pip3或使用 运行setup.pypython3,它似乎运行良好,但是当我实际尝试将其导入时python 3.3解释器,我得到以下信息:

>>> import chess
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.3/dist-packages/python_chess-0.0.4-py3.3-linux-i686.egg/chess/__init__.py", line 30, in <module>
    from libchess import START_FEN
ImportError: /usr/lib/libboost_python-py27.so.1.53.0: undefined symbol: PyClass_Type
>>> 

从这条消息看来,该库正在尝试boost-python用于 Python 2.7,即使它是使用 Python 3.3 构建然后安装的。我已经boost-python为 Python 2.7 和 Python 3.3 安装了包,所以我认为我需要一种让这个库使用/usr/lib/libboost_python-py33.so.1.53.0文件的方法。

我怎样才能做到这一点?或者也许我的结论是错误的,在这种情况下,我该如何真正解决这个问题?

4

1 回答 1

2

python-chess 使用一些 C++ 代码,这些代码是在您执行 setup.py 时编译的;它找到了 Python 2.7 版本的 boost 库,并与之链接。现在你不能回去了,你必须删除你安装的东西并重新编译它。这一次,确保它找到了正确的库。我猜你有一个 /usr/lib/libboost_python.so 符号链接到 /usr/lib/libboost_python-py27.so.xxx,对吧?您可以临时更改此符号链接,以便它与正确的库链接,也许。

编辑:它在静态链接并确保 /usr/lib/libboost_python.a 指向 /usr/lib/libboost_python-py33.a 时有效

于 2013-10-08T08:57:42.627 回答