我花了相当长的时间今天尝试编译PYD为python 3.5上windows 10使用与生成的代码cython.我知道有人可以这样做,MSVS但我想使用,mingw因为我不想下载太多的垃圾.我已搜索周围,我发现这太问题:如何从用Cython编译.C代码用gcc
我试图按照公认的答案(改变一切Python27's到Python35),但没有用.我看到它确实python 2.7有用,所以我想知道为什么它不能正常工作3.5.如果有人能帮助我解决这个问题,那将是非常棒的.提前致谢.
我正在尝试返回 C++ 类的实例并使用 Boost.Python 将其返回给 Python。我想做的是有这样的代码:
class foo {
std::string name;
public:
void set_name(std::string name) {this->name = name;}
std::string get_name() {return this->name;}
};
class bar {
public:
foo get_foo(std::string name) {
foo my_foo;
my_foo.set_name(name);
return my_foo;
}
};
Run Code Online (Sandbox Code Playgroud)
我用以下内容包裹它:
BOOST_PYTHON_MODULE(foobar)
{
class_<foo, boost::noncopyable>("foo")
.def("set_name", &foo::set_name)
.def("get_name", &foo::get_name)
;
class_<bar, boost::noncopyable>("bar")
.def("get_foo", &bar::get_foo);
}
Run Code Online (Sandbox Code Playgroud)
您可能也注意到了,我需要 foo 和 bar 都是不可复制的,因为在实际项目中,里面有套接字。当尝试编译上面的内容时,我收到一个 Python TypeError:
TypeError: No to_python (by-value) converter found for C++ type
Run Code Online (Sandbox Code Playgroud)
我用Python这样调用它:
Python 3.6.1 (default, Mar 22 2017, 06:17:05)
[GCC 6.3.0 20170321] …Run Code Online (Sandbox Code Playgroud)