Mac OS X 上的 Boost.Python:“TypeError:属性名称必须是字符串”

Posted

技术标签:

【中文标题】Mac OS X 上的 Boost.Python:“TypeError:属性名称必须是字符串”【英文标题】:Boost.Python on Mac OS X: "TypeError: Attribute name must be string" 【发布时间】:2010-06-22 01:16:35 【问题描述】:

我最近使用 MacPorts 安装了 Boost,目的是在 C++ 中嵌入一些 Python。然后我决定使用 Python 网站上的示例检查我是否正确配置了 Xcode:

#include <boost/python.hpp>

using namespace boost::python;

int main( int argc, char ** argv ) 

    try 
    
        Py_Initialize();

        object main_module(handle<>(borrowed(PyImport_AddModule("__main__"))));

        object main_namespace = main_module.attr("__dict__");

        handle<> ignored(PyRun_String("print \"Hello, World\"",
                                      Py_file_input,
                                      main_namespace.ptr(),
                                      main_namespace.ptr()));
     
    catch( error_already_set ) 
    
        PyErr_Print();
    

它编译正确,但是当我启动它时,对 attr() 的调用会引发异常,并且生成的错误消息是 "TypeError: attribute name must be string, not 'str'" .这听起来有点像占位符。

我在谷歌上查过,但没有运气。

我在 Leopard 上使用 Boost v1.39、Python 2.5 和 GCC 4.0。

【问题讨论】:

很难说有什么问题,代码似乎可以工作(win/lin、py3、gcc/vs2005/10、boost 42/43)您是否检查过您的操作系统版本是否受到所有官方支持你用吗? Python、Boost 和 GCC 4 都在 OS X 上得到官方支持。但是,很难判断 Boost.Python 是否具体支持。他们的文档似乎已经过时了,它似乎可以在 OS X 10.3 上使用 Python 2.3 和 GCC 3.3,但与 Leopard 无关。也许这就是问题所在。我会调查的。 【参考方案1】:

您的代码使用以下配置为我工作:

雪豹 gcc 版本 4.2.1(AppleInc. build 5646) Boost 1.41.0 安装到 /usr/local/boost/1_41_0/ Stock OSX Python 2.5

编译使用:

g++ -I/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/ -I/usr/local/boost/1_41_0/include - L/usr/local/boost/1_41_0/lib/ -boost_python -L/usr/lib/python2.6/config -lpython2.6 test.cpp

【讨论】:

我尝试过使用 Boost 1.42、GCC 4.2 和 Python 2.5;还是不行。我还没有用雪豹测试它......

以上是关于Mac OS X 上的 Boost.Python:“TypeError:属性名称必须是字符串”的主要内容,如果未能解决你的问题,请参考以下文章

Mac OS X 上的 GCC 标志 -Os 来自哪里?

text Mac OS X上的Git和凭据

markdown Mac OS X上的Docker Machine

PHP Mac OS X上的PHP系统加载

sh 如何杀死mac os x终端上的端口

sh 如何杀死mac os x终端上的端口