2012-05-31 111 views
0

我建立了一个DLL在VS2010用的boost :: python的一些功能导出到一个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文档(http://wiki.python.org/moin/boost.python/SimpleExample),我需要将它添加到PYTHONPATH,所以我添加了c:\ myDLL \ Debug: PYTHONPATH : C:\ Python27; c:\ myDLL \ Debug;

然后,从我的.py文件,我试图将其导入:各种

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

我也从MYDLL进口getting_started1尝试,并从getting_started1进口*,和所有可能的组合。

任何人都可以告诉我我该怎么称呼我的模块?谢谢

编辑: 根据cgohlke,我应该有一个位于我的PYTHONPATH中的某个位置,当我在VS编译?这个文件是不存在的...我必须在VS2010中设置一些不同的东西吗?我有一个默认的win32 DLL项目。 但助推文档说“如果我们建立这个共享库,并把它放在我们的PYTHONPATH”,是不是Windows上的DLL共享库? ergo,DLL应该在PYTHONPATH中?

回答

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

+0

将同样适用于Visual Studio的2013 ,提升python2 1.55和python 2.7.9? – MMM

0
  1. 我设法让它只在Release配置中工作,而不是在Debug中。
  2. 从项目属性,在常规选项卡,修改目标扩展到.pyd
  3. 该项目应该是确实是一个DLL,像你一样
  4. 在Python脚本,你需要指定DLL的位置为在这个例子中: 进口SYS sys.path.append( “d:\\ \\ TheProjectl斌\\发行”) 进口getting_started #Dll名不带扩展