2013-03-24 37 views
1

我有同样的问题比这家伙在这里升压Python的Hello World示例在Python不工作,请再次

Boost Python Hello World example not working in Python

谁解决了他的问题,没有指示如何。那里的帖子已经很老了,在发布之后,我现在又创建了一个新的问题,让它更新一些。所以...:

我的配置:Windows 8的62bits,蟒蛇2.7.3 32位,Visual Studio 2010的最终

我跟着

http://www.boost.org/doc/libs/1_53_0/libs/python/doc/tutorial/doc/html/python/exposing.html

我创建了一个win32application项目在Visual Studio中称为CLIB,并勾选“dll”而不是“导出符号”。

在VC++目录中的属性,我把:

C:\ Python27x86 \包括:C:\提升\ boost_1_53_0; $(INCLUDEPATH)

为包括目录和

C:\升压\ boost_1_53_0 \ stage \ lib; C:\ Python27x86 \ libs; $(LibraryPath)

用于库目录。

在CLIB.cpp我把

// CLIB.cpp : Defines the exported functions for the DLL application. 
// 

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#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) 
{ 
    boost::python::class_<World>("World") 
     .def("greet", &World::greet) 
     .def("set", &World::set) 
     ; 
} 

我试图与或不添加

#define BOOST_PYTHON_STATIC_LIB 

然后我在调试模式下编译的(成功),则输出的.dll(或.pyd,我已经尝试过,没有任何成功,通过在项目的“配置属性”中的“常规”中将.dll的目标扩展名修改为.pyd)CLIB.dll位于一个目录中,该目录的路径也添加到了PYTHONPATH中。我甚至试图把一个空白初始化的.py在同一目录比DLL,而且,无论我做什么,我不能够在python脚本做

import hello 

(从新鲜要么创建用记事本++或用32位编码器)。所以如果有人能够给予确切的帮助,那将是完美的。

Thx很多。

//////////////////////////编辑1 ////////////////// /////////

在此期间,我看到python 2.7与mvs2008一起编译,所以擦掉所有东西,安装了python 3.3,用python 3.3重建了boost和boost.python,然后重试,但是...相同的结果...

//////////////////////////编辑2 ////////////////// /////////

由于提出了运行具有非常冗长-vv命令的Python脚本,这里是结果:

PS C:\Users\TheUser\Desktop\CLIB\Release> python -vv .\script.py 
import _frozen_importlib # frozen 
import imp # builtin 
import sys # builtin 
# installing zipimport hook 
import 'zipimport' # <class '_frozen_importlib.BuiltinImporter'> 
# installed zipimport hook 
# C:\Python33x86\Lib\encodings\__pycache__\__init__.cpython-33.pyc matches C:\Python33x86\Lib\encodings\__init__.py 
# code object from C:\Python33x86\Lib\encodings\__pycache__\__init__.cpython-33.pyc 
# C:\Python33x86\Lib\__pycache__\codecs.cpython-33.pyc matches C:\Python33x86\Lib\codecs.py 
# code object from C:\Python33x86\Lib\__pycache__\codecs.cpython-33.pyc 
import '_codecs' # <class '_frozen_importlib.BuiltinImporter'> 
import 'codecs' # <_frozen_importlib.SourceFileLoader object at 0x01E50870> 
# C:\Python33x86\Lib\encodings\__pycache__\aliases.cpython-33.pyc matches C:\Python33x86\Lib\encodings\aliases.py 
# code object from C:\Python33x86\Lib\encodings\__pycache__\aliases.cpython-33.pyc 
import 'encodings.aliases' # <_frozen_importlib.SourceFileLoader object at 0x01E91B90> 
import 'encodings' # <_frozen_importlib.SourceFileLoader object at 0x01E503F0> 
# C:\Python33x86\Lib\encodings\__pycache__\mbcs.cpython-33.pyc matches C:\Python33x86\Lib\encodings\mbcs.py 
# code object from C:\Python33x86\Lib\encodings\__pycache__\mbcs.cpython-33.pyc 
import 'encodings.mbcs' # <_frozen_importlib.SourceFileLoader object at 0x01E9E730> 
# C:\Python33x86\Lib\encodings\__pycache__\utf_8.cpython-33.pyc matches C:\Python33x86\Lib\encodings\utf_8.py 
# code object from C:\Python33x86\Lib\encodings\__pycache__\utf_8.cpython-33.pyc 
import 'encodings.utf_8' # <_frozen_importlib.SourceFileLoader object at 0x01E9E8D0> 
# C:\Python33x86\Lib\encodings\__pycache__\latin_1.cpython-33.pyc matches C:\Python33x86\Lib\encodings\latin_1.py 
# code object from C:\Python33x86\Lib\encodings\__pycache__\latin_1.cpython-33.pyc 
import 'encodings.latin_1' # <_frozen_importlib.SourceFileLoader object at 0x01E9E9B0> 
# C:\Python33x86\Lib\__pycache__\io.cpython-33.pyc matches C:\Python33x86\Lib\io.py 
# code object from C:\Python33x86\Lib\__pycache__\io.cpython-33.pyc 
# C:\Python33x86\Lib\__pycache__\abc.cpython-33.pyc matches C:\Python33x86\Lib\abc.py 
# code object from C:\Python33x86\Lib\__pycache__\abc.cpython-33.pyc 
# C:\Python33x86\Lib\__pycache__\_weakrefset.cpython-33.pyc matches C:\Python33x86\Lib\_weakrefset.py 
# code object from C:\Python33x86\Lib\__pycache__\_weakrefset.cpython-33.pyc 
import '_weakrefset' # <_frozen_importlib.SourceFileLoader object at 0x01EA7150> 
import 'abc' # <_frozen_importlib.SourceFileLoader object at 0x01E9EC30> 
import 'io' # <_frozen_importlib.SourceFileLoader object at 0x01E9EB10> 
# C:\Python33x86\Lib\encodings\__pycache__\cp850.cpython-33.pyc matches C:\Python33x86\Lib\encodings\cp850.py 
# code object from C:\Python33x86\Lib\encodings\__pycache__\cp850.cpython-33.pyc 
import 'encodings.cp850' # <_frozen_importlib.SourceFileLoader object at 0x01EA7F50> 
# C:\Python33x86\Lib\__pycache__\site.cpython-33.pyc matches C:\Python33x86\Lib\site.py 
# code object from C:\Python33x86\Lib\__pycache__\site.cpython-33.pyc 
# C:\Python33x86\Lib\__pycache__\os.cpython-33.pyc matches C:\Python33x86\Lib\os.py 
# code object from C:\Python33x86\Lib\__pycache__\os.cpython-33.pyc 
import 'errno' # <class '_frozen_importlib.BuiltinImporter'> 
# C:\Python33x86\Lib\__pycache__\stat.cpython-33.pyc matches C:\Python33x86\Lib\stat.py 
# code object from C:\Python33x86\Lib\__pycache__\stat.cpython-33.pyc 
import 'stat' # <_frozen_importlib.SourceFileLoader object at 0x01EBD190> 
# C:\Python33x86\Lib\__pycache__\ntpath.cpython-33.pyc matches C:\Python33x86\Lib\ntpath.py 
# code object from C:\Python33x86\Lib\__pycache__\ntpath.cpython-33.pyc 
# C:\Python33x86\Lib\__pycache__\genericpath.cpython-33.pyc matches C:\Python33x86\Lib\genericpath.py 
# code object from C:\Python33x86\Lib\__pycache__\genericpath.cpython-33.pyc 
import 'genericpath' # <_frozen_importlib.SourceFileLoader object at 0x01EBDE50> 
import 'ntpath' # <_frozen_importlib.SourceFileLoader object at 0x01EBDAD0> 
# C:\Python33x86\Lib\collections\__pycache__\__init__.cpython-33.pyc matches C:\Python33x86\Lib\collections\__init__.py 
# code object from C:\Python33x86\Lib\collections\__pycache__\__init__.cpython-33.pyc 
# C:\Python33x86\Lib\collections\__pycache__\abc.cpython-33.pyc matches C:\Python33x86\Lib\collections\abc.py 
# code object from C:\Python33x86\Lib\collections\__pycache__\abc.cpython-33.pyc 
import 'collections.abc' # <_frozen_importlib.SourceFileLoader object at 0x027C3FB0> 
import '_collections' # <class '_frozen_importlib.BuiltinImporter'> 
import 'operator' # <class '_frozen_importlib.BuiltinImporter'> 
# C:\Python33x86\Lib\__pycache__\keyword.cpython-33.pyc matches C:\Python33x86\Lib\keyword.py 
# code object from C:\Python33x86\Lib\__pycache__\keyword.cpython-33.pyc 
import 'keyword' # <_frozen_importlib.SourceFileLoader object at 0x027E1330> 
# C:\Python33x86\Lib\__pycache__\heapq.cpython-33.pyc matches C:\Python33x86\Lib\heapq.py 
# code object from C:\Python33x86\Lib\__pycache__\heapq.cpython-33.pyc 
import 'itertools' # <class '_frozen_importlib.BuiltinImporter'> 
# C:\Python33x86\Lib\__pycache__\bisect.cpython-33.pyc matches C:\Python33x86\Lib\bisect.py 
# code object from C:\Python33x86\Lib\__pycache__\bisect.cpython-33.pyc 
import '_bisect' # <class '_frozen_importlib.BuiltinImporter'> 
import 'bisect' # <_frozen_importlib.SourceFileLoader object at 0x027E1EF0> 
import '_heapq' # <class '_frozen_importlib.BuiltinImporter'> 
import 'heapq' # <_frozen_importlib.SourceFileLoader object at 0x027E1910> 
# C:\Python33x86\Lib\__pycache__\weakref.cpython-33.pyc matches C:\Python33x86\Lib\weakref.py 
# code object from C:\Python33x86\Lib\__pycache__\weakref.cpython-33.pyc 
import 'weakref' # <_frozen_importlib.SourceFileLoader object at 0x027E1950> 
# C:\Python33x86\Lib\__pycache__\reprlib.cpython-33.pyc matches C:\Python33x86\Lib\reprlib.py 
# code object from C:\Python33x86\Lib\__pycache__\reprlib.cpython-33.pyc 
import 'reprlib' # <_frozen_importlib.SourceFileLoader object at 0x027E9CF0> 
import 'collections' # <_frozen_importlib.SourceFileLoader object at 0x01EC0CD0> 
# C:\Python33x86\Lib\__pycache__\copyreg.cpython-33.pyc matches C:\Python33x86\Lib\copyreg.py 
# code object from C:\Python33x86\Lib\__pycache__\copyreg.cpython-33.pyc 
import 'copyreg' # <_frozen_importlib.SourceFileLoader object at 0x027EFD10> 
import 'os' # <_frozen_importlib.SourceFileLoader object at 0x01EB3130> 
# C:\Python33x86\Lib\__pycache__\re.cpython-33.pyc matches C:\Python33x86\Lib\re.py 
# code object from C:\Python33x86\Lib\__pycache__\re.cpython-33.pyc 
# C:\Python33x86\Lib\__pycache__\sre_compile.cpython-33.pyc matches C:\Python33x86\Lib\sre_compile.py 
# code object from C:\Python33x86\Lib\__pycache__\sre_compile.cpython-33.pyc 
import '_sre' # <class '_frozen_importlib.BuiltinImporter'> 
# C:\Python33x86\Lib\__pycache__\sre_parse.cpython-33.pyc matches C:\Python33x86\Lib\sre_parse.py 
# code object from C:\Python33x86\Lib\__pycache__\sre_parse.cpython-33.pyc 
# C:\Python33x86\Lib\__pycache__\sre_constants.cpython-33.pyc matches C:\Python33x86\Lib\sre_constants.py 
# code object from C:\Python33x86\Lib\__pycache__\sre_constants.cpython-33.pyc 
import 'sre_constants' # <_frozen_importlib.SourceFileLoader object at 0x028054F0> 
import 'sre_parse' # <_frozen_importlib.SourceFileLoader object at 0x027FD530> 
import 'sre_compile' # <_frozen_importlib.SourceFileLoader object at 0x01EB3690> 
# C:\Python33x86\Lib\__pycache__\functools.cpython-33.pyc matches C:\Python33x86\Lib\functools.py 
# code object from C:\Python33x86\Lib\__pycache__\functools.cpython-33.pyc 
import '_functools' # <class '_frozen_importlib.BuiltinImporter'> 
import 'functools' # <_frozen_importlib.SourceFileLoader object at 0x027FD8D0> 
import 're' # <_frozen_importlib.SourceFileLoader object at 0x01EBD5D0> 
# C:\Python33x86\Lib\__pycache__\sysconfig.cpython-33.pyc matches C:\Python33x86\Lib\sysconfig.py 
# code object from C:\Python33x86\Lib\__pycache__\sysconfig.cpython-33.pyc 
import 'sysconfig' # <_frozen_importlib.SourceFileLoader object at 0x0280D9F0> 
# C:\Python33x86\Lib\__pycache__\locale.cpython-33.pyc matches C:\Python33x86\Lib\locale.py 
# code object from C:\Python33x86\Lib\__pycache__\locale.cpython-33.pyc 
import '_locale' # <class '_frozen_importlib.BuiltinImporter'> 
import 'locale' # <_frozen_importlib.SourceFileLoader object at 0x0281B810> 
# C:\Python33x86\Lib\encodings\__pycache__\cp1252.cpython-33.pyc matches C:\Python33x86\Lib\encodings\cp1252.py 
# code object from C:\Python33x86\Lib\encodings\__pycache__\cp1252.cpython-33.pyc 
import 'encodings.cp1252' # <_frozen_importlib.SourceFileLoader object at 0x02825350> 
import 'site' # <_frozen_importlib.SourceFileLoader object at 0x01EA4290> 
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
import 'math' # <class '_frozen_importlib.BuiltinImporter'> 
Traceback (most recent call last): 
    File ".\script.py", line 2, in <module> 
    import CLIB 
    File "<frozen importlib._bootstrap>", line 1558, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 1525, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 586, in _check_name_wrapper 
    File "<frozen importlib._bootstrap>", line 497, in set_package_wrapper 
    File "<frozen importlib._bootstrap>", line 510, in set_loader_wrapper 
    File "<frozen importlib._bootstrap>", line 1130, in load_module 
    File "<frozen importlib._bootstrap>", line 313, in _call_with_frames_removed 
ImportError: DLL load failed: The specified module could not be found. 
+0

请您模块的本地目录中运行代码时。你得到了什么确切的错误信息?只是“找不到模块”或更具体的东西? – 2013-03-24 12:35:24

+0

试过你说的,同样的错误:只是“导入错误:没有名为'你好'的模块”。在此期间,我看到python 2.7是用mvs2008编译的,所以删除了所有内容,安装了python 3.3,用python 3.3重建了boost和boost.python,然后重试,但是...结果相同...您怎么看? – 2013-03-24 15:07:22

+0

正如[this](http://stackoverflow.com/a/15576882/1053968)中所述,请考虑使用['-vv']运行python(http://docs.python.org/3.1/using/cmdline .html#cmdoption-trace-v)参数。这应该提供洞察“import”尝试的内容。 – 2013-03-25 17:01:28

回答

0

有似乎是进口之间的差异声明,扩展模块名称和扩展库名称:

BOOST_PYTHON_MODULE宏定义模块初始化函数。在CLIB.cpp变化

BOOST_PYTHON_MODULE(hello)

BOOST_PYTHON_MODULE(CLIB)

接下来,验证结果输出库具有CLIB前缀。 Python3.3删除了一些很少使用的模块名称变体的支持。根据documentation,我建议先尝试一个.pyd文件扩展名,如果.pyd不起作用,则使用.dll。因此,得到的库应该是CLIB.pyd

最后,试图导入扩展用的

import CLIB 

代替

import hello 
+0

是的,你是对的,同时改变“你好”从 BOOST_PYTHON_MODULE(你好) { // ... } 到CLIB,而我在编制发布模式,称为CLIB.pyd一个PYD文件,在一个目录,我把我在其中也做我的python脚本一个“导入CLIB”,没有任何成功。哼,我生气了。 ;-)我不记得在堆栈中的哪个位置,我看到有人说,关于boost.python,如下所示:“呃,忘了它,它的代码在藤上腐烂......” – 2013-03-26 07:49:00

+0

@MisesEnForce:如果重命名文件到'CLIB.dll'不起作用,那么你可能要考虑恢复到2.7.3,以便在使用'-vv'运行时导入更加有意义的冗余。 – 2013-03-26 12:41:04

+0

嗯,我应该留在MVS2010吗?我是否应该用mvsc-9.0(和python 2.7.3)重新编译boost和boost.python?因为在切换到3.3之前我做了所有这些,特别是因为我想使用mvs2010,并且因为我读了2.7。不应该与mvs2010一起用于编译boost.python?谢谢 – 2013-03-26 19:16:49