导入python boost模块

时间:2012-05-31 17:30:22

标签: python visual-studio-2010 boost dll

我使用boost :: python在VS2010中构建了一个DLL,将一些函数导出到python模块:

myDLL.cpp:

std::string greet() { return "hello, world"; }
int square(int number) { return number * number; }

BOOST_PYTHON_MODULE(getting_started1)
{
    // Add regular functions to the module.
    def("greet", greet);
    def("square", square);
}

到此为止,一切都很好。然后我在c:\ myDLL \ Debug中获取myDLL.dll和myDLL.lib文件。

根据boost doc(http://wiki.python.org/moin/boost.python/SimpleExample),我需要将它添加到PYTHONPATH,所以我添加了c:\ myDLL \ Debug: PYTHONPATH: C:\ Python27; C:\ MYDLL \调试;

然后,从我的.py文件中,我尝试导入它:

import getting_started1
print getting_started1.greet()
number = 11
print number, '*', number, '=', getting_started1.square(number)

我也尝试过myDLL import getting_started1,来自getting_started1 import *,以及所有可能的排序组合。

谁能告诉我怎么称呼我的模块?感谢

编辑: 根据cgohlke的说法,当我在VS中编译时,我的PYTHONPATH中应该有一个getting_started1.pyd?这个文件是不存在的......我是否必须在VS2010中设置一些不同的东西?我有一个默认的win32 DLL项目。 但是升级文档说“如果我们构建这个共享库并把它放在我们的PYTHONPATH上”,那么Windows上的共享库是不是DLL?这个DLL应该在PYTHONPATH中吗?

2 个答案:

答案 0 :(得分:2)

构建Python扩展的标准,可移植方式是distutils。但是,Visual Studio 2010不是Python 2.7支持的编译器。以下setup.py适用于Visual Studio 2008和boost_1_48_0。构建命令为python setup.py build_ext --inplace

# setup.py
from distutils.core import setup
from distutils.extension import Extension
setup(name="getting_started1",
    ext_modules=[
        Extension("getting_started1", ["getting_started1.cpp"],
        include_dirs=['boost_1_48_0'],
        libraries = ['boost_python-vc90-mt-1_48'],
        extra_compile_args=['/EHsc', '/FD', '/DBOOST_ALL_DYN_LINK=1']
        )
    ])

对于Visual Studio 2010项目,尝试将链接器输出文件更改为getting_started1.pyd而不是myDLL.dll

答案 1 :(得分:0)

  1. 我设法让它只在Release配置中运行,而不是在Debug。
  2. 从项目属性中,在“常规”选项卡上,将“目标扩展名”修改为.pyd
  3. 项目应该确实是一个dll,就像你做的那样
  4. 在Python脚本中,您需要指定dll的位置,如下例所示: 导入系统 sys.path.append( “d:\\ \\ TheProjectl斌\\发行”) 导入get_started #Dll名称,不带扩展名