2011-01-17 8 views
7

Ich versuche, Python 2.6 in .NET 4.0 einzubetten.Python für .NET: ImportError: Kein Modul namens Warnungen

die sehr minimale Dokumentation Nach in „Python for .NET“, schrieb ich einen ziemlich einfachen Code wie folge:

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); 

Auch wenn test.py leer ich einen Importfehler erhalten sagen: „Kein Modul mit dem Namen Warnungen ".

'import site' failed; use -v for traceback 

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

Der Grund wird deutlich, wenn man test.py mit "Python -v" (ausführlicher Modus) ausgeführt werden. Beachten Sie, dass Python #cleanup [2] Warnungen aufruft.

Warum kann Python .NET Warnungen nicht auflösen? Das Modul ist im Lib-Verzeichnis vorhanden.

Irgendwelche Ideen?

Antwort

2

Ich denke, dass die Python-Engine standardmäßig die Pfade nicht automatisch einstellt, die Sie benötigen.

http://www.voidspace.org.uk/ironpython/custom_executable.shtml hat ein Beispiel für die Einbettung von Ironpython. Sieht aus wie Sie so etwas wie

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

fehlen Es sei denn, ich weiß, wo und wenn Ironpython installiert ist, ziehe ich alle Standardmodule ich brauche und kompilieren sie zu einem IPyStdLibDLL und dann tun th folgende von meinem Code finden

1

@SilentGhost Ich weiß nicht, ob Sie das herausgefunden haben, aber Sie müssen Ihre PYTHONPATH-Umgebungsvariable statt Ihrer PYTHONHOME-Variable festlegen. Auch ich hatte das Problem, die Umgebungsvariable mit der alten Environment.SetVariable ("PYTHONPATH", ...) einzustellen und am Ende hat alles gut geklappt.

Viel Glück mit Python.NET.