Python pour .NET peut être installé dans divers environnements, mais il n'y a pas beaucoup d'informations sur la combinaison possible. Je vais me concentrer sur ce que j'ai fait. Je décrirai dans l'ordre de celui qui a été fait.
Oh, je n'utilise que des appels de direction Python-> .NET, pas de script intégré.
Windows 10
Je pense que cela est principalement utilisé sur Windows 10, donc je vais essayer plus épais.
Les conditions fixes sont les suivantes.
Comme il est écrit comme suit, j'utilise essentiellement 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.
J'aimerais que .NET 5 sorte bientôt, mais je dois attendre un moment, donc du côté de l'héritage. J'utilise .NET 4.6 préinstallé sur Windows 10.
Vous n'avez rien à faire de particulier. C'est naturel car c'est un environnement standard.
Je viens d'ajouter l'environnement d'Anaconda3, et je n'avais pas besoin de Tweak.
Si cela ne vous donne pas d'erreur, ça devrait aller.
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__)
Résultat d'exécution
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
La version de Windows 10 est suspecte, mais là. .. ..
Depuis la dernière version 8.x de BayesServer, il peut être fourni en .NET Standard, Python pour .NET (.NET Framework) -> Validation d'un appel à la bibliothèque .NET Standard.
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
Je ne sais pas si les développeurs de bureau sont au niveau où il est temps d'envisager de migrer vers .NET Core, mais .NET Core 3.1 apporte des fonctionnalités aussi bonnes que Framework. Mais malheureusement, pythonnet n'est pas encore prêt et il semble que vous ne puissiez pas exécuter Python à partir de .NET Core. (En premier lieu, une telle chose n'est pas autorisée)
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.
Comme coreCLR ne prend pas en charge l'invocation inversée, il est écrit comme un jeu impossible. N'est-il pas acceptable de créer .NET Core à partir de Python? Je pense.
Pourtant! Ce qui précède est l'information pour 2016, et la situation est décrite dans le numéro suivant à partir de là.
.NET Core support and CoreCLR embedding - cross-platform API #96 @ github
denfromufa commented on Oct 17, 2018 Selon le statut de support suivant.
Platform | .NET-> Python | Python -> .NET |
---|---|---|
Windows | Tested | Coded (npython.exe) |
Linux | Tested | Tested (npython.exe) |
OSX | Coded | Coded (npython.exe) |
Lors de l'appel de .NET Core à partir de Python, il semble qu'il existe de nombreuses restrictions telles que la limitation de npython.
Linux
Cela fonctionne comme un pont pour Mono sur Linux.
Installez Mono ci-dessous. L'environnement d'exécution est presque prêt.
sudo apt-get install mono-complete
Chargez le pythonnet et vérifiez-le de la même manière.
import clr
clr.AddReference("System.Windows.Forms")
from System.Windows.Forms import Form
J'utilise l'environnement sur 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__)
Résultat d'exécution
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
Appels validés à la bibliothèque Python pour .NET (Mono) -> .NET Standard .NET Standard.
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)
Cela semble fonctionner d'une manière ou d'une autre.
.NET Core
Mac OSX
Mono
.NET Core
Recommended Posts