2011-01-17 20 views
7

.NET 4.0にPython 2.6を埋め込むようにしています。次のようにPython for .NET:ImportError:警告のあるモジュールがありません

は「.NET用のPython」で非常に最小限のドキュメンテーションに続いて、私はかなり簡単なコードを書いた:

const string pythonModulePath = @"C:\Projects\PythonImport\PythonImport\test.py"; 
Environment.SetEnvironmentVariable("PYTHONHOME", Path.GetDirectoryName(python 
ModulePath)); 

PythonEngine.Initialize(); 

var oldWorkingDirectory = Directory.GetCurrentDirectory(); 
var currWorkingDirectory = Path.GetDirectoryName(pythonModulePath); 

Directory.SetCurrentDirectory(currWorkingDirectory); 

var pyPlugin = PythonEngine.ImportModule(Path.GetFileNameWithoutExtension(python 
ModulePath)); 
if (pyPlugin == null) 
{ 
     throw new PythonException(); 
} 

Directory.SetCurrentDirectory(oldWorkingDirectory); 

をtest.pyが空の場合でも、私はインポートエラーなしモジュールが名前のない」と言ってます警告 "です。

'import site' failed; use -v for traceback 

Unhandled Exception: Python.Runtime.PythonException: ImportError : No module nam 
ed warnings 

"python -v"(冗長モード)を使用してtest.pyを実行すると、その理由が明らかになります。 Pythonは#cleanup [2]警告を呼び出します。

なぜPython .NETは警告を解決できないのですか?モジュールはLibディレクトリにあります。

アイデア?

答えて

2

デフォルトでは、Pythonエンジンは自動的に必要なパスを設定しません。

http://www.voidspace.org.uk/ironpython/custom_executable.shtmlにはironpythonが埋め込まれています。私はどこ知っているとIronPythonのがインストールされている場合、私は、私が必要とする標準モジュールのすべてを見つけるIPyStdLibDLLにそれらをコンパイルして、自分のコード

から、次の第行うことを好む場合を除き、あなたが

PythonEngine engine = new PythonEngine(); 
engine.AddToPath(Path.GetDirectoryName(Application.ExecutablePath)); 
engine.AddToPath(MyPathToStdLib); 

のような何かが欠けているように見えます

1

@ SilentGhostあなたがこれを理解したかどうかわかりませんが、PYTHONHOME変数ではなくPYTHONPATH環境変数を設定する必要があります。私も、問題を抱えていました。環境変数をol 'Environment.SetVariable( "PYTHONPATH"、...)で設定し、すべてがうまくいきました。

Python.NETで幸運を祈る。

関連する問題