导入python boost modu

2024-09-26 22:12:18 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在我的dll.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);
}

到目前为止,一切都很好。然后我得到我的dll.dll以及我的dll.libc:\myDLL\Debug中的文件。在

据boost医生说(http://wiki.python.org/moin/boost.python/SimpleExample),我需要将此添加到PYTHONPATH,因此我将c:\myDLL\Debug添加到它: Python: C: \Python27;C:\myDLL\Debug

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

^{pr2}$

我也尝试过从myDLL import获取_started1,从getting_started1 import*,以及所有可能的组合。在

有人能告诉我怎么给我的模块打电话吗?谢谢

编辑: 根据cgohlke的说法,当我在VS中编译时,PYTHONPATH的某个地方应该有一个getting-unstarted1.pyd?此文件不存在。。。我需要在VS2010中设置一些不同的东西吗?我有一个默认的win32 DLL项目。 但是boost文档说“如果我们构建这个共享库并把它放到PYTHONPATH上”,windows上的共享库不是DLL吗?因此,DLL应该在PYTHONPATH中?在


Tags: 模块文件debugnumberreturndllboostsquare
2条回答

构建Python扩展的标准、可移植的方法是通过distutils。但是,VisualStudio2010不是Python2.7支持的编译器。以下内容设置.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']
        )
    ])

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

  1. 我设法让它只在发布配置中工作,而不在调试中工作。在
  2. 在“项目属性”的“常规”选项卡上,将目标扩展名修改为.pyd
  3. 项目确实应该是一个dll,正如您所做的那样
  4. 在Python脚本中,需要指定dll的位置,如下例所示: 导入系统 系统路径追加(“d:\\TheProjectl\\bin\\Release”) 导入没有扩展名的getting#Dll名称

相关问题 更多 >

    热门问题