2013-03-24 2 views
1

У меня такая же проблема, чем парень здесьподталкивания Python Hello World пример не работает в Python, СНОВА

Boost Python Hello World example not working in Python

, который решал свою проблему, не указывая, как. Должности, которые там были довольно стары, после того, как там были размещены, я теперь создаю новый вопрос, немного освежая вещи. Так что ...:

Моя конфигурация: окна 8 62bits, Python 2.7.3 32 бит, Visual Studio 2010 Ultimate

Я последовал

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

Я создал проект win32application называемый 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. Я даже пытался поставить пустой INIT .py в том же каталоге, чем DLL, и все, что я делаю, я не могу сделать

import hello 

в сценарии питона (созданный из свежих либо с блокнотом ++ или с пискриптером 32 бита). Поэтому, если кто-то может дать точную помощь, это будет идеально.

Thx много.

////////////////////////// EDIT 1 ////////////////// /////////

В то же время я увидел, что python 2.7 был скомпилирован с mvs2008, поэтому стереть все, установить python 3.3, перестроить boost и boost.python с помощью python 3.3 и повторить попытку, но ... тот же результат ...

////////////////////////// EDIT 2 ////////////////// /////////

Как предложен запустить сценарий питона с очень многословным -vv команды, вот результат:

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

Пожалуйста, запустите код в локальном каталоге вашего модуля. Какое точное сообщение об ошибке вы получаете? Просто «модуль не найден» или что-то более конкретное? –

+0

Пробовал то, что вы сказали, ту же ошибку: просто «Ошибка импорта: нет модуля с именем« привет ». Тем временем я увидел, что python 2.7 был скомпилирован с mvs2008, поэтому стереть все, установить python 3.3, перестроить boost и boost.python с помощью python 3.3 и повторить попытку, но ... тот же результат ... Как вы думаете? –

+0

Как указано в [this] (http://stackoverflow.com/a/15576882/1053968), ответьте, запустите python с помощью ['-vv'] (http://docs.python.org/3.1/using/cmdline .html # cmdoption-trace-v). Это должно обеспечить понимание того, что предпринимается при импорте. –

ответ

0

Там, кажется, разница между импортом (ы), имя модуля расширения и имя библиотеки расширений:

Макрос BOOST_PYTHON_MODULE определяет функцию инициализации модуля. В CLIB.cpp изменения

BOOST_PYTHON_MODULE(hello)

к

BOOST_PYTHON_MODULE(CLIB)

Далее, убедитесь, что в результате выхода библиотека имеет префикс CLIB. Python3.3 удалил поддержку некоторых из редко используемых вариантов имени модуля. По documentation, я предлагаю попробовать сначала расширение файла .pyd, и прибегает к .dll, если .pyd не работает. Таким образом, полученная библиотека должна быть CLIB.pyd.

Наконец, при попытке импорта на использования удлинителей

import CLIB 

вместо того, чтобы

import hello 
+0

Да, вы правы, в то же время измените «привет» от BOOST_PYTHON_MODULE (привет) { // ...} к CLIB, и я компиляции в режиме выпуска, файл PYD называется CLIB.pyd, в директории, где я положил мой питон скрипт, в котором я сделал также «импорт CLIB», без каких-либо успехов. Хм, я злюсь. ;-) Я не помню, где на стеке я видел, как кто-то говорил, о boost.python, что-то вроде: «duh, забудьте об этом, его код гниет на лозе» ... –

+0

@MisesEnForce: Если переименовать файл для 'CLIB.dll' не работает, тогда вы можете захотеть вернуться к 2.7.3 для более значимой многословности импорта при работе с' -vv'. –

+0

Хм, стоит ли мне оставаться с MVS2010? Должен ли я перекомпилировать boost и boost.python с mvsc-9.0 (и python 2.7.3) также? Потому что я сделал все это, прежде чем переключиться на 3.3, особенно потому, что я хотел использовать mvs2010, и потому что я читал это 2.7. shoud не будет использоваться с mvs2010 для компиляции boost.python? Спасибо –

Смежные вопросы