2011-12-13 16 views
1

私は入力文字列を受け取り、それらをPython関数に渡すPythonラッパーを持っています。 PythonのAPIは、私のpythonファイルを認識していないことを取得エラーイムがある...埋め込みPythonモジュールのエラー

PyObject *pName, *pModule, *pFunc; 
QString pyFile="Test.py"; 
Py_Initialize(); 
pName = PyUnicode_FromString(pyFile.toAscii().data()); 
pModule = PyImport_Import(pName); 

エラーが「はImportError:Test.pyという名前のモジュール」である は、これは私が同じで私のTest.pyを持っている場合ではありません

は私が私のディレクトリツリー内の1レベル上の私のTest.pyを置き、私のプロジェクトとして、ディレクトリ、別のエラーが エラーが

ので、私は、絶対パスはいけない仕事推測「のインポートは、ファイル名でサポートされていない」されて来ましたか?私の例の最初のケースでは、自分のプロジェクトと同じディレクトリに私のTest.pyを配置しましたが、なぜエラーが出ますか? Pythonのコードは次のとおりです。

import sys 
import os 

def printFileClass(fileName, className): 
    print ("The OMC CORBA File name is ", fileName,"\n") 
    print ("The selected Modelica Class is ", className) 
    return ("Done operations") 


def main(): 
    print ("Hello! Here is testing script's main \n") 



if __name__=='__main__': 
main() 
+0

私は真剣にすべてのPythonモジュールやスクリプトの名前 "テスト"を使用しないことをお勧めします。この名前のモジュールが組み込まれていて、独自のモジュールを作成すると常に問題が発生します。インポート時にモジュール名から ".py"を削除してみてください。 –

+0

は、私はちょうどテストで試してみましたが、それは私に同じエラーを与えた... =( – PeterG

答えて

1

それは「Test.py」という名前のモジュールが存在しない最初のケースでは本当です。あなたのモジュールは "Test.py"ファイルにあり、 "Test"という名前です。それをインポートしてみてください。 "Test.py"は "Test"という名前のパッケージ内の "py"サブモジュールです。

+0

ので、私はちょうどテストを試してみました。しかし、誰モジュール名テストの同じエラーを得た.... – PeterG

3

PYTHONPATH環境変数は、あなたの問題を解決するために使用することができます。あなたのコードで

、あなたはPy_Initialize前にこのどこか()を行うことができます。

setenv("PYTHONPATH", ".", 0); // #include <stdlib.h> to get the prototype 

三番目のパラメータ、0を、上書きすること - それはあなたがまたシェルからPYTHONPATHを渡すことができ、ゼロです。あなたはいつもあなたがコード化されたパスを使用したい場合は、私はよく分からない

1に、これは他の問題にあなたを公開しないことを設定することができますが、簡単なテストのためにそれが動作します。

また、あなたがPyImport_Importに渡すモジュール名での.py拡張子を含めないでください。

私はこれをLinuxシステムでテストしました。

+1

ちょうどドキュメントを通過、Pythonのを。 hは既にあなたのためにstdlib.hを含んでいます。 –