Mise à jour des scripts jsl à l'aide de Python vers JMP 18Nous avons des scripts jsl qui appellent des scripts python que je souhaite maintenant mettre à jour pour la nouvelle fonctionnalité Python de JMP 18.
Jusqu'à JMP 18, nous faisions quelque chose comme ceci pour préparer la connexion Python :
// Python setup
Python Init( Debug Print Statements( "TRUE" ), Init Trace("TRUE"), Debug Print Output("TRUE") );
Python Submit(
"\[
import numpy as _JMPnp
import scipy as _JMPsp
import pandas as _JMPpd
import sqlite3 as _JMPsq
if PY_DEBUG_OUTPUT:
print("Python Imports OK")
]\"
);Puisque Python Init () est désormais obsolète, je me demande a) si j'ai même besoin maintenant d'initialiser la connexion python avant d'utiliser python send(), submit(), .... b) si oui, comment je le ferais en utilisant, je suppose, en utilisant python connect ()
Ma théorie actuelle est que je devrais remplacer l'élément ci-dessus par :
Python connect();
Python submit (
...blablabla...
);
mais la documentation et les exemples sont un peu rares à ce sujet.
Automatisation et scriptsRe : Mise à jour des scripts jsl en utilisant Python vers JMP 18Ni Python Init() ni Python Connect() ne sont nécessaires pour « initialiser » l'environnement Python dans JMP 18. Python étant intégré et installé avec JMP, il est disponible immédiatement. C'est pourquoi Python Init() est obsolète. Python Connect existe toujours pour prendre en charge l'utilisation d'un objet de connexion.
conn = Python Connect();
conn << Obtenir( dt );
conn << Soumettre("\[ ... code python ... ]\");
Si vous n'avez pas besoin de l'objet de connexion, vous n'avez besoin ni de Python Init() ni de Python Connect(). tu peux simplement faire :
Python Soumettre(
... mon code ici ...
);
Re : Mise à jour des scripts JSL avec Python vers JMP 18Je pense que mon erreur de pensée était que j'avais besoin d'une sorte d'initialisation car j'ai eu des erreurs indiquant que les packages que je voulais n'étaient pas trouvés.
Mais après avoir exécuté jmputils.jpip('list'), je vois que je dois d'abord les installer (je supposais que les packages standards comme numpy ou pandas seraient préinstallés).
Re : Mise à jour des scripts JSL avec Python vers JMP 18JMP 18.0 est fourni uniquement avec la distribution standard de Python.org, à l'exception de quelques paquets susceptibles d'entrer en conflit avec Python exécuté dans JMP. Il s'agit principalement de tkinter et de venv. Tous les paquets externes doivent être installés par l'utilisateur. Plusieurs raisons expliquent ce problème. Tout paquet fourni par JMP, qu'il s'agisse d'une bibliothèque, d'un paquet ou d'un composant open source tiers, doit passer par plusieurs processus d'approbation en interne, notamment par notre service juridique. Cela implique également que nous surveillons ces paquets afin de détecter les corrections de bugs et les problèmes de sécurité. Enfin, des incompatibilités existent entre les paquets ; le choix d'une version de paquet peut donc entraîner un conflit avec un paquet dont vous avez besoin. Vous avez le choix entre les paquets dont vous avez besoin, en dehors de ceux fournis dans la bibliothèque standard.
Autres éléments à noter dans le portage des scripts Python JMP 14-17.
- Python Term(); n'est pas nécessaire puisque l'environnement ne disparaît que lorsque vous arrêtez JMP.
- Python Get Graphics(); was removed from JMP 18. This single function caused a dependency on matplotlib. And the goal is to prevent JMP from requiring any external packages for basic functionality. It is easy enough to replicate the same functionality in your own scripts. The Scripting Index example for 'Python Get Graphics();' contains a complete example of the replacement code. Simply save the figure to an image file and open the image in a JMP window.
Python Submit("\[
...
# save image to location of your choosing
plt.savefig('/tmp/get_graphics_img.png')
]\");
// plot = Python Get Graphics( png ); // DEPRECATED
plot = Open( "/tmp/get_graphics_img.png", png );
pngJMP = New Window( "Plot", Picture Box( plot ) );
Python Submit( "plt.close()" );
rc = Delete File( "/tmp/get_graphics_img.png" );
- Python Control() était utilisé pour définir certaines options avec matplotlib. Bien qu'il n'ait pas été supprimé dans la version 18.0, sa seule fonction est désormais d'afficher un avertissement « obsolète » dans le journal.
- Python Is Connected(); est obsolète car il renvoie toujours vrai. L'environnement Python est toujours disponible.
Dernier point à noter. Nous avons découvert un problème avec mx = Python Get( numpy.ndarray ); Si le tableau NumPy avait plus de deux dimensions, vous obteniez un résultat, mais perdiez les dimensions supérieures à deux. Un problème survenait également si la disposition de la mémoire du tableau NumPy était en colonnes (style Fortran) plutôt qu'en lignes (style C). Cela pouvait entraîner un plantage de JMP. Ce problème a été résolu. Le correctif sera présent dans JMP 18.1. Si vous rencontrez ce problème dans JMP 18.0, assurez-vous que vos données NumPy sont au format lignes et que vous n'utilisez que des ndarrays à une ou deux dimensions. Lorsque vous utilisez Get() un ndarray, il tente de créer une matrice JSL qui ne prend en charge qu'une ou deux dimensions. Ce bug est spécifique à JMP 18.0, car JMP 14-17 transférait les données via le système de fichiers sous forme de fichier binaire temporaire de doubles. Bien que 14-17 puisse perdre des données si le nombre de dimensions est supérieur à 2.