次の行を使用して
pModule = PyImport_Import(pName);
現在のディレクトリからのみモジュールをロードします。
しかし、どこかから何をロードしたいですか? そうするためのきちんとした方法はありますか?
PyRun_SimpleString("import sys\nsys.path.append('<dir>')");
動作しますが、少し醜いです - より良い方法を探しています
ありがとう!
次の行を使用して
pModule = PyImport_Import(pName);
現在のディレクトリからのみモジュールをロードします。
しかし、どこかから何をロードしたいですか? そうするためのきちんとした方法はありますか?
PyRun_SimpleString("import sys\nsys.path.append('<dir>')");
動作しますが、少し醜いです - より良い方法を探しています
ありがとう!
私が探していた答えがhttp://realmike.org/blog/2012/07/08/embedding-python-tutorial-part-1/で見つかりました
通常、モジュールをインポートするとき、Python はインポートするモジュール (インポート ステートメントを含むモジュール) の隣にあるモジュール ファイルを見つけようとします。次に、Python は「sys.path」内のディレクトリを試行します。通常、現在の作業ディレクトリは考慮されません。私たちの場合、インポートは API を介して実行されるため、Python が「shout_filter.py」を検索できるディレクトリを持つインポート モジュールはありません。プラグインも「sys.path」にありません。Python がプラグインを見つけられるようにする 1 つの方法は、API を介して「sys.path.append('.')」と同等の処理を実行して、現在の作業ディレクトリをモジュール検索パスに追加することです。
Py_Initialize();
PyObject* sysPath = PySys_GetObject((char*)"path");
PyObject* programName = PyString_FromString(SplitFilename(argv[1]).c_str());
PyList_Append(sysPath, programName);
Py_DECREF(programName);
SplitFilename
ディレクトリを取得するために私が書いた関数です。
これはサイトパックでよく行われる方法なので、良い方法があります。
import sys
sys.path.append(directory) # sys.path is a list of all directories to import from
またはあなたが使用する
os.cwd(directory) # change the working directory
輸入前。
別の方法は醜いです:
import types, sys
m = types.ModuleType('module')
sys.modules['module'] = m
exec open('file').read() in m.__dict__ # python3
多分あなたはあなたの仕事をするためにC関数を求めましたが、私は知りません。