Die Einbettung von IronPython in einer C# - Anwendung - import-Fehler auf das urllib
Habe ich eine Python-Datei mit Inhalt:
import re
import urllib
class A(object):
def __init__(self, x):
self.x = x
def getVal(self):
return self.x
def __str__(self):
return "instance of A with value '%s'" % (self.getVal())
Ich habe auch eine einfache C# - konsolenprojekt mit dem folgenden code:
engine = Python.CreateEngine();
ScriptSource source = engine.CreateScriptSourceFromFile("test.py");
ScriptScope scope = engine.CreateScope();
ObjectOperations op = engine.Operations;
source.Execute(scope); //class object created
object klaz = scope.GetVariable("A"); //get the class object
object instance = op.Call(klaz, "blabla waarde"); //create the instance
object method = op.GetMember(instance, "getVal"); //get a method
string result = (string)op.Call(method); //call method and get result (9)
Console.WriteLine("Result: " + result); //output: 'Result: blabla waarde'
(Ich habe diese aus diese stackoverflow-querstion und Antwort)
Wenn ich die die das urllib import-Anweisung in der Python-Datei funktioniert alles einwandfrei. (das heißt, Sie findet das re-Modul)
Aber sobald ich entweder hinzufügen import urllib
oder import urllib2
bekomme ich die folgende exception:
ImportException was unhandled
No module named urllib
Also irgendwie kann es nicht finden, die das urllib. Ich habe in der IronPython-lib-Ordner und sowohl das urllib und das urllib 2 sind definitiv vorhanden.
Dieselbe Ausnahme wird geworfen, wenn ich das urllib import in der C# - code. (engine.ImportModule("urllib");
)
Irgendwelche Ideen?
Ich möchte zur Verwaltung der Einfuhren in der python-code und nicht in der C# - code.
(So möchte ich vermeiden, Dinge wie diese: engine.ImportModule("urllib");
)
Edit:
Einige zusätzliche Infos darüber, was ich bin eigentlich Los, um diese zu verwenden für (hat jemand vielleicht eine alternative):
Ich habe eine C# Anwendung und den python-Skripts verwendet werden als Erweiterungen oder plugins, die für die Haupt-Anwendung.
Ich bin mit Python, so dass ich nicht brauchen, um zu kompilieren alle plugins.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich das gleiche problem. Folgende "Tom E" - Vorschlag in die Kommentare zu fuzzyman die Antwort konnte ich erfolgreich beheben. Das Problem scheint zu sein, es ist nicht in der Lage, den Standort aufzulösen, der urllib.py. Wir brauchen, um es zu setzen.
Können Sie die folgenden link für die Frage und die Antwort.
Ich glaube, dass 'Lib' auf sys.Weg von der interaktiven Konsole ist eigentlich in ipy.exe - und bei der Einbettung müssen Sie den Pfad manuell eingeben. Entweder ist der Motor oder die Laufzeit hat einen 'SetSourcePaths' (oder ähnlich) - Methode, die Ihnen erlauben, dies zu tun.
['.', 'C:\\DATA\\My Dropbox\\Projects\\C#\\IronPython reference\\DynamicTest\\Dy namicTest\\bin\\Debug\\Lib']
(der Ort, der mein Projekt). Ich muss nur die richtige Funktion zum hinzufügen der richtigen library-Pfad. Aber das wird für morgen. Dies bedeutet auch, dass der Benutzer dieses Programm installieren, müssen IronPython? Ich hatte gehofft, dass, wenn die C# - Anwendung kompiliert und der IronPython-DLL-Dateien sind Bestandteil des Programms in der Lage sein würde zu laufen. (es sei denn, ich füge die IronPython-Bibliotheken wie gut?)source.Execute(scope);
:/Version von CPython Sie importieren müssen mit Ihrem IronPython-version. Verwenden CPython v2.5 für IronPython 2.0 oder v2.6 für IronPython 2.6.
Versuchen Sie dies:
import os
wirft die gleiche Ausnahme wie das urllib, so kann ich die Frage nicht beantworten :). Interaktiv (Beide in IronPython und CPython) gibt es Keine Edit: ich denke fuzzyman könnte auf der richtigen Spur, wenn Drucksys.path
aus dem Skript bekomme ich nur['.', 'C:\\DATA\\My Dropbox\\Projects\\C#\\IronPython reference\\DynamicTest\\Dy namicTest\\bin\\Debug\\Lib']
Jetzt muss ich nur noch finden, die richtige Funktion zum laden der richtigen lib-Pfad.