5

私は、今のところ、pythonモジュールをCに埋め込むためのpython docsに記載されているこの例を機能させようとしています。私の問題は、Pythonスクリプトをどこに置くべきか分からないことです。私の最終的な目標は、完全な python パッケージ (__init__.pyおよびさまざまなモジュールを含むフォルダー) を実行して C にロードできるようにすることPyImport_Import(...)です。しかし今のところ、指定された C プログラムが実行されるように、示されているスクリプトを配置する場所 (ファイル名、パスなど) を教えてください。

編集

私が試したことを指摘する必要があります。ファイルをローカルディレクトリに配置するだけでなく、ファイルmultiply.pyで呼び出されるサブディレクトリに配置しようとしました。これらすべてのケースで、私は得るmultiply__init__.pyImportError: No module named multiply

4

1 に答える 1

3

sys.path同じディレクトリまたは名前でモジュールをロードする必要があると思いますが、これは機能するはずです:

./call multiply multiply 5 6

更新:現在のディレクトリを明示的に追加するsys.pathと機能します:

Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append(\".\")");

そして、これは次のように出力されます:

./call multiply multiply 5 6
('Will compute', 5, 'times', 6)
Result of call: 30

更新:関連する質問をしましたが、PySys_SetArgv代わりに追加するだけで機能するようです:

Py_Initialize();
PySys_SetArgv(argc, argv);

その理由は次のように述べられています。

それ以外の場合 (つまり、argc が 0 の場合、または argv[0] が既存のファイル名を指していない場合)、空の文字列が sys.path の前に追加されます。これは、現在の作業ディレクトリ (".") を前に追加するのと同じです。

そして、これはあなたもそこで答えを確認できる質問です:

PyImport_Import が現在のディレクトリからモジュールをロードできないのはなぜですか?

于 2012-11-16T18:21:24.817 に答える