Python и SWIG - несколько модулей в одном .pyd (.so) - PullRequest
3 голосов
/ 15 ноября 2011

Я пишу расширение C ++ для Python, используя SWIG.Из того, что я понимаю в Python и SWIG, каждый модуль должен иметь свой собственный файл .pyd.Например, если у меня есть модуль с именем 'mymodule', должен быть соответствующий файл '_mymodule.pyd'.

В моем конкретном случае я хотел бы иметь только один файл 'pyd' и несколько модулейссылка на него.

mypackage/
mypackage/__init__.py
mypackage/module1.py
mypackage/module2.py

Мне не нужно поддерживать несколько .pyd, поэтому я могу поместить все файлы моего интерфейса (.i) в один и тот же проект в VS2010.

Редактировать: до сих пор единственный способ, которым я смог заставить его работать, - это дублировать мой файл 'pyd' на два новых файла: _module1.pyd и _module2.pyd.Но мне не нравится это решение, потому что мне нужно без необходимости дублировать pyd-файл 30 Mo.Я бы предпочел, чтобы модули ссылались на один файл _package.pyd.

Как лучше всего это сделать?

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

У меня просто та же проблема, мое решение использует модуль python ctypes

spclient_python.pyd - это pydll с двумя функциями init, официальной initspclient_python в качестве имени dll и другим модулем под названием example с функцией initexample.Каждый модуль в Python имеет соответствующую функцию initXXXXXXX в DLL.

import ctypes
testlib = ctypes.PyDLL("spclient_python.pyd") #this will call initspclient_python 
testlib.initexample() # here I am manually calling initexample function inside spclient_python.pyd
import sys
print (sys.modules.keys()) # this will display all the modules imported...spclient_python and example will show
import spclient_python # this is for me to use the module in the code below
import example
test1=spclient_python.test1()
test2=example.test2()
0 голосов
/ 23 марта 2012

Наконец, самый простой и «правильный» способ сделать это - создать несколько проектов, вызывающих только некоторые открытые части большого монолитного проекта.Небольшие проекты будут проанализированы SWIG для создания модулей Python.Работает как шарм.

...