2012-05-31 3 views
0

Я построил DLL в VS2010 с усилением :: питона экспортировать некоторые функции в модуль 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); 
} 

До здесь, все компилируется нормально , Затем я получаю файл myDLL.dll и myDLL.lib в c: \ myDLL \ Debug.

Согласно увеличить документ (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 импорта *, и все возможные комбинации сортов.

Может ли кто-нибудь сказать мне, как я могу назвать свой модуль? Спасибо

EDIT: Согласно cgohlke, должен быть get_started1.pyd где-то в моем PYTHONPATH, когда я компилирую в VS? Этот файл неуязвим ... Должен ли я устанавливать somethign different в VS2010? У меня есть проект win32 по умолчанию win32. Но ускоритель сообщает: «Если мы создадим эту общую библиотеку и поместим ее на наш 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'] 
     ) 
    ]) 

Для вашего визуального проекта студии 2010, попытайтесь изменить выходной линкер файл getting_started1.pyd вместо myDLL.dll.

+0

бы то же самое применяется к визуальной студии 2013 , повысить уровень python2 1.55 и python 2.7.9? – MMM

0
  1. Мне удалось заставить его работать только в конфигурации Release, а не в Debug.
  2. Из свойств проекта, на вкладке Общие, изменение целевого расширения для .pyd
  3. Проект должен быть действительно длл, как вы делали
  4. В сценарии Python необходимо указать расположение библиотеки DLL, как в этом примере: импорт SYS sys.path.append ("d: \\ TheProjectl \\ бен \\ Release") импорт Getting_Started имя #Dll без расширения
Смежные вопросы