私は単純な(?)埋め込みPythonプロジェクトに取り組んでいます。'setup.py install'を使用してsite-packagesにインストールされたカスタムパッケージがあります。例:
C:\ Python27 \ Lib \ site-packages \内:
mypackage\
__init__.py
subpackage\
__init__.py
subpackage.py
....
mymodule.py
いくつかの単純な埋め込み呼び出しを実行するだけで、Pythonを実行しているcmdウィンドウで取得したものと一致しない動作が発生します。具体的には:
PyRun_SimpleString("import mypackage") //Success (return == 0)
PyRun_SimpleString("from mypackage import subpackage") //Success
PyRun_SimpleString("from mypackage import mymodule") //Fail (return == -1)
...これらはすべてcmdウィンドウで正常に機能します(ImportErrorはありません。たとえば、期待される結果を得ることができます。dir(mymodule)
結果として得られるインタープリターPy_Initialize()
は、cmdウィンドウで取得するものとは少し異なることを認識しています。特に、sys.path ...他の回答をいくつか読んだので、sysの最初の要素として''を挿入してみました。 .path:
PyRun_SimpleString("import sys\nsys.path.insert(0,'')")
インポートが失敗する前ですが、運がない場合でも-1を返します。また、sys.pathに「C:\ Python27 \ Lib \ site-packages \ mypackage」を追加しようとしましたが、「mymodule」(mymodule.py)をインポートできませんでした。
SOや他のサイトの他の例に基づいて、インポート時にいくつかのバリエーションを試しました。
__import__('mypackage',globals(), locals(), fromlist=['mymodule'])
__import__('mypackage.mymodule',globals(), locals(), fromlist=['mymodule'])
またPyImport_ImportModuleEx
、PyRun_SimpleStringと同様に、「frommypackageimportmymodule」以外のすべてで機能しました。
さらに、このシナリオはMacOS /Python2.7で問題なく機能します。失敗しているのはWindowsのすぐ下です。
これが軌道に乗らない可能性があるアイデアはありますか?
更新:いくつかの追加情報:'subpackage.py'は拡張ライブラリをインポートします('utilites.pyd'と呼びましょう)。これをインポートしない他の「.py」モジュールをインポートすることができます。