Vérifiez le fonctionnement de Python pour .NET dans chaque environnement

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.

Python.NET @ github

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.

.NET Framework 4 (succès)

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.

Préparation de l'environnement .NET

Vous n'avez rien à faire de particulier. C'est naturel car c'est un environnement standard.

Préparer l'environnement Python

Je viens d'ajouter l'environnement d'Anaconda3, et je n'avais pas besoin de Tweak.

Contrôle de fonctionnement

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à. .. ..

Appel à la bibliothèque standard .NET (succès)

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.

Mono (succès)

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

Appel à la bibliothèque standard .NET (succès)

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

Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
Vérifiez le comportement du destroyer en Python
Vérifiez le temps de traitement et le nombre d'appels pour chaque processus avec python (cProfile)
Faites correspondre la distribution de chaque groupe en Python
Code pour vérifier le fonctionnement de Python Matplot lib
Changer le module à charger pour chaque environnement d'exécution en Python
Vérifier l'existence de tables BigQuery en Java
Vérifiez la nature atrophique de la distribution de probabilité en Python
Rechercher les fuites de mémoire dans Python
Obtenez le nombre d'occurrences pour chaque élément de la liste
Sortie de la table spécifiée de la base de données Oracle en Python vers Excel pour chaque fichier
Google recherche la chaîne sur la dernière ligne du fichier en Python
Obtenez l'index de chaque élément de la matrice de confusion en Python
Envelopper (partie de) la bibliothèque AtCoder en Cython pour une utilisation en Python
Vérifiez l'augmentation / la diminution des pièces de monnaie pour chaque adresse de la blockchain
[Compris dans la figure] Gestion de l'environnement virtuel Python par Pipenv
Comment vérifier la taille de la mémoire d'une variable en Python
Redimensionner automatiquement les captures d'écran de l'App Store pour chaque écran en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Développement LINEbot, je souhaite vérifier le fonctionnement dans l'environnement local
python Remarque: map -faire la même chose pour chaque élément de la liste
Vérifier l'existence du fichier avec python
À propos de l'environnement virtuel de Python version 3.7
Résumé de diverses instructions for en Python
Vérifiez si l'URL existe en Python
Le résultat de l'installation de python sur Anaconda
Vérifiez le chemin du module importé Python
MongoDB avec Python pour la première fois
Principes de base pour exécuter NoxPlayer en Python
Pandas du débutant, par le débutant, pour le débutant [Python]
À la recherche du FizzBuzz le plus rapide en Python
Statut de chaque système de traitement Python en 2020
Préparer un environnement de développement Python pour chaque projet dans un environnement Windows (VSCode + virtualEnvWrapper + Pylint)
Vérifions la chaîne d'octets en mémoire du nombre flottant flottant en Python
Mémo de l'opération de position de pixel pour les données d'image avec Python (numpy, cv2)
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
[Python] Raison de dtype "int32" dans Numpy (environnement Windows) (à partir de septembre 2020)
Obtenez la clé pour la migration de la deuxième couche de données JSON avec python
CERTIFICATE_VERIFY_FAILED dans Python 3.6, le programme d'installation officiel de macOS
Sortie du nombre de cœurs de processeur en Python
Vérifiez le fonctionnement d'OpenCV3 installé par Anaconda
L'histoire selon laquelle le coût d'apprentissage de Python est faible
[Python] Trier la liste de pathlib.Path dans l'ordre naturel
Préparer l'environnement d'exécution de Python3 avec Docker
Vérifiez si les caractères sont similaires en Python
Configurer un serveur SMTP factice avec Python et vérifier le fonctionnement de l'envoi depuis Action Mailer
Fonctionnement sans assistance des feuilles de calcul Google (etc.) en Python
Récupérer l'appelant d'une fonction en Python
Afficher le résultat du traitement de la géométrie en Python
Copiez la liste en Python
Vérifiez la date du devoir de drapeau avec Python
Installez le package python dans un environnement hors ligne
Conseils pour accéder à l'API ATND avec Python
Découvrez la fraction de la valeur saisie en python
Traitement d'image? L'histoire du démarrage de Python pour
Trouvez la solution de l'équation d'ordre n avec python
L'histoire de la lecture des données HSPICE en Python
[Note] À propos du rôle du trait de soulignement "_" en Python
Résolution d'équations de mouvement en Python (odeint)
Sortie sous la forme d'un tableau python