Python für .NET kann in verschiedenen Umgebungen installiert werden, es gibt jedoch nicht viele Informationen darüber, welche Kombination möglich ist. Ich werde mich auf das konzentrieren, was ich getan habe. Ich werde in der Reihenfolge von dem beschreiben, der gemacht wurde.
Oh, ich verwende nur Python-> .NET-Richtungsaufrufe, kein Embedded Scripting.
Windows 10
Ich denke, dass dies hauptsächlich unter Windows 10 verwendet wird, also werde ich es dicker versuchen.
Die festen Bedingungen sind wie folgt.
Da es wie folgt geschrieben ist, verwende ich grundsätzlich 3.7.
Python 3.8.0 support Some features are disabled in Python 3.8.0 because of this bug in Python. The error is System.EntryPointNotFoundException : Unable to find an entry point named 'Py_CompileString' in DLL 'python38'. This will be fixed in Python 3.8.1.
Ich möchte, dass .NET 5 bald herauskommt, aber ich muss eine Weile warten, also von der alten Seite. Ich verwende .NET 4.6, das unter Windows 10 vorinstalliert ist.
Sie müssen nichts Besonderes tun. Es ist natürlich, weil es eine Standardumgebung ist.
Ich habe gerade die Umgebung von Anaconda3 hinzugefügt und brauchte Tweak nicht.
Wenn dies keinen Fehler ergibt, sollte es Ihnen gut gehen.
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form
import sys
print("OS : ", Environment.OSVersion.VersionString)
print("Python : " ,sys.version)
print(".NET : ", Environment.Version.ToString())
print("pythonnet : " , clr.__version__)
Ausführungsergebnis
OS : Microsoft Windows NT 10.0.19041.0
python : 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)]
.NET : 4.0.30319.42000
pythonnet : 2.4.0
Die Version von Windows 10 ist verdächtig, aber da. .. ..
Ab der neuesten Version 8.x von BayesServer kann es in .NET Standard bereitgestellt, Python für .NET (.NET Framework) -> sein Validierte einen Aufruf der .NET Standard-Bibliothek.
sys.path.append("C:/Program Files/Bayes Server/Bayes Server 8.16/API/DotNet/Standard20/")
clr.AddReference("BayesServer")
import BayesServer
network = Network()
network.Load("model.bayes")
print(network.Links.Count)
.NET Core
Ich weiß nicht, ob Desktop-Entwickler auf dem Niveau sind, auf dem sie eine Migration auf .NET Core in Betracht ziehen sollten, aber .NET Core 3.1 verfügt über Funktionen, die so gut wie Framework sind. Leider ist Pythonnet noch nicht fertig und es scheint, dass Sie Python nicht über .NET Core ausführen können. (Erstens ist so etwas nicht erlaubt)
Support for .NET Core? #243 @ github
.NET Core (CoreCLR) does not provide reverse pinvoke like .NET Framework on Windows, neither C++/CLI. Hence the only way to get this working is to embed .NET Core using C-API, like this is done for Mono. The problem is that C-API for CoreCLR looks quite different from Mono.
CoreCLR unterstützt kein Reverse P / Invoke, daher schreibe ich es als unmögliches Spiel. Ist es nicht in Ordnung, .NET Core aus Python zu erstellen? Ich denke.
Jedoch! Das Obige ist die Information für 2016, und die Situation wird in der folgenden Ausgabe von dort beschrieben.
.NET Core support and CoreCLR embedding - cross-platform API #96 @ github
denfromufa commented on Oct 17, 2018 Entsprechend dem folgenden Supportstatus.
Platform | .NET-> Python | Python -> .NET |
---|---|---|
Windows | Tested | Coded (npython.exe) |
Linux | Tested | Tested (npython.exe) |
OSX | Coded | Coded (npython.exe) |
Wenn Sie .NET Core von Python aus aufrufen, gibt es anscheinend einige Einschränkungen, z. B. die npython-Einschränkung.
Linux
Es funktioniert als Brücke für Mono unter Linux.
Installieren Sie Mono unten. Die Ausführungsumgebung ist fast fertig.
sudo apt-get install mono-complete
Laden Sie Pythonnet und überprüfen Sie es auf die gleiche Weise.
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form
Ich benutze die Umgebung unter Ubuntu 16.04.6 LTS.
import sys
print("OS : ", Environment.OSVersion.VersionString)
print("python : " ,sys.version)
print(".NET : ", Environment.Version.ToString())
print("pythonnet : " , clr.__version__)
Ausführungsergebnis
OS : Unix 4.15.0.1063
python : 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 19:07:31)
[GCC 7.3.0]
.NET : 4.0.30319.42000
pythonnet : 2.4.0
Validierte Aufrufe der Python for .NET (Mono) -> .NET Standard .NET Standard-Bibliothek.
sys.path.append("/mnt/azmnt/code/Users/bayesserver-8.16/DotNet/Standard20")
clr.AddReference("BayesServer")
import BayesServer
network = Network()
network.Load("model.bayes")
print(network.Links.Count)
Es scheint irgendwie zu funktionieren.
.NET Core
Mac OSX
Mono
.NET Core
Recommended Posts