让python库使用另一个版本的boost-python

时间:2013-10-08 08:27:18

标签: python python-3.x boost-python python-3.3

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

当我将它安装到Python 2.7(带有pip或来自源代码的setup.py)时,一切都运行良好,但是当我尝试使用pip3将其安装到Python 3.3时使用setup.py运行python3,它似乎运行良好,但当我实际尝试在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一起安装。我为Python 2.7和Python 3.3安装了boost-python包,所以我认为我需要的是让这个库使用/usr/lib/libboost_python-py33.so.1.53.0文件的方法。

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

1 个答案:

答案 0 :(得分:2)

python-chess使用了一些在执行setup.py时编译的C ++代码;它找到了 boost 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

时,它可以正常工作