我在Python中使用Visual C ++(由boost包装)的c ++代码时遇到了很多麻烦。
好吧,我使用的工具有:Visual Studio 2010,BoostPro 1_47,Windows 7和Python 2.7(32位)。
我有以下代码可以在Visual Studio 2010中很好地编译:
#define BOOST_PYTHON_STATIC_LIB
#include <boost/python.hpp>
using namespace boost::python;
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set);
}
格式如下:Win32控制台应用程序&gt;&gt;&gt;空项目/ DLL。
在&#34;项目属性&#34;:
VC++ DIRECTORIES:
I added:
>>> INCLUDE DIRECTORIES: C:\Program Files\boost\boost_1_47;C:\Python27\include .
>>> LIBRARY DIRECTORIES: C:\Program Files\boost\boost_1_47\lib;C:\Python27\libs
所有这些都使c ++文件构建,但我无法从Python访问它。
当我尝试使用该模块时,这就是Python所说的:
">>> import hello
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
import hello
ImportError: No module named hello
所以我想我的问题是......我怎样才能让Python找到它?
当c ++代码编译时,它会创建一个DLL文件。我是否必须更改文件的位置?如果是的话,我应该把它放在哪里?
非常感谢您的帮助
答案 0 :(得分:11)
AFAIK您必须将DLL的扩展名更改为.pyd
,否则Python将无法加载它。我想你可以设置一个构建选项来自动设置VS中的扩展名,但我不确定。
另外,确保创建的扩展名在PYTHONPATH
上的某个位置,路径,python将查找要加载的模块。