4

SWIGを使用してPython用のC++拡張機能を作成しています。私がPythonとSWIGについて理解していることから、各モジュールには独自の.pydファイルが必要です。たとえば、「mymodule」という名前のモジュールがある場合、対応する「_mymodule.pyd」ファイルがあるはずです。

私の特定のケースでは、1つの「pyd」ファイルとそれにリンクする複数のモジュールのみが必要です。

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

複数の.pydを維持する必要がないので、インターフェイス(.i)ファイルをすべてVS2010の同じプロジェクトに配置できます。

編集:これまでのところ、これを機能させる唯一の方法は、「pyd」ファイルを2つの新しいファイル_module1.pydと_module2.pydに複製することです。しかし、30 Moの「pyd」ファイルを不必要に複製する必要があるため、このソリューションは好きではありません。モジュールが1つの'_package.pyd'ファイルにリンクすることをお勧めします。

それを行うための最良の方法は何ですか?

4

2 に答える 2

0

最後に、それを行う最も簡単な方法と「正しい」方法は、大きなモノリシックプロジェクトの一部の公開された部分のみを呼び出す複数のプロジェクトを作成することです。小さいプロジェクトはSWIGによって解析され、Pythonモジュールが作成されます。チャームのように機能します。

于 2012-03-23T14:26:36.153 に答える
-1

私のソリューションはpythonctypesモジュールを使用して同じ問題を抱えています

spclient_python.pydは、2つのinit関数を持つpydllであり、公式の1つはdll名としてinitspclient_pythonであり、もう1つはinitexample関数を持つexampleと呼ばれるモジュールです。Pythonのすべてのモジュールには、dllに対応するinitXXXXXXX関数があります。

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()
于 2018-12-10T03:55:42.010 に答える