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:属性名称必须是字符串”的主要内容,如果未能解决你的问题,请参考以下文章