Actualización de scripts jsl usando Python a JMP 18Tenemos scripts jsl que llaman scripts de Python que ahora quiero actualizar para la nueva funcionalidad Python de JMP 18.
Hasta JMP 18, hacíamos algo como esto para preparar la conexión de 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")
]\"
);Dado que Python Init () ahora está en desuso, me pregunto a) si necesito inicializar la conexión de Python antes de usar Python send(), submit(), .... b) en caso afirmativo, ¿cómo lo haría? usando supongo que usando python connect ()
Mi teoría actual es que necesitaría reemplazar el elemento anterior con:
Python connect();
Python submit (
...blablabla...
);
pero la documentación y los ejemplos son un poco escasos al respecto.
Automatización y secuencias de comandosRe: Actualizar scripts jsl usando Python a JMP 18Ni Python Init() ni Python Connect() son necesarios para 'inicializar' el entorno Python en JMP 18. Debido a que Python está integrado e instalado con JMP, está disponible de inmediato. Esta es la razón por la que Python Init() quedó obsoleto. Python Connect todavía existe para admitir el uso de un objeto de conexión.
conexión = Python Connect();
conexión << Obtener( dt );
conn << Enviar("\[... código Python... ]\");
Si no necesita el objeto de conexión, no necesita Python Init() ni Python Connect(). simplemente puedes hacer:
Envío de Python (
... mi código aquí ...
);
Re: Actualización de scripts jsl usando Python a JMP 18Creo que mi error de pensamiento fue que necesitaba algún tipo de inicialización porque recibí errores de que no se encontraron los paquetes que quería.
Pero después de ejecutar jmputils.jpip('list'), veo que necesito instalarlos primero (supuse que los paquetes estándar como numpy o pandas estarían preinstalados).
Re: Actualización de scripts jsl usando Python a JMP 18JMP 18.0 solo incluye la distribución estándar de Python.org, salvo algunos paquetes que podrían causar conflictos con Python al ejecutarse desde JMP. Principalmente, se trata de tkinter y venv. El usuario debe instalar cualquier paquete externo. Hay un par de razones. Todo lo que JMP incluye, ya sea una biblioteca, paquete o componente de código abierto de terceros, debe pasar por varios procesos de aprobación interna, incluyendo la revisión de nuestro departamento legal. Esto también implica que supervisamos el paquete para detectar posibles correcciones de errores y problemas de seguridad. Finalmente, existen incompatibilidades entre paquetes, por lo que elegir una versión de un paquete podría entrar en conflicto con un paquete que usted necesita. Tiene la libertad de elegir los paquetes que necesita fuera de lo que se incluye en la biblioteca estándar.
Otros elementos a tener en cuenta al portar scripts Python de JMP 14-17.
- Python Term(); no es necesario ya que el entorno solo desaparece cuando se apaga 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" );
- Control() de Python se usaba para configurar algunas opciones con matplotlib. Aunque no se eliminó en la versión 18.0, ahora su única función es mostrar una advertencia de "obsoleto" en el registro.
- Python Is Connected(); está obsoleto porque siempre devuelve verdadero. El entorno de Python siempre está disponible.
Un último problema a tener en cuenta. Descubrimos un problema con mx = Python Get( numpy.ndarray ); Si el array NumPy era mayor que 2 dimensiones, obtendría un resultado, pero perdería dimensiones mayores que dos. También había un problema si el diseño de memoria del array NumPy era Column-Major (estilo Fortran) en lugar de Row-Major (estilo C). Esto podía provocar un fallo de JMP. Este problema se ha resuelto. La solución estará presente en JMP 18.1. Si se encuentra con esto en JMP 18.0, asegúrese de que sus datos NumPy estén en formato Row-Major y 'Get' solo ndarrays de 1 o 2 dimensiones. Cuando Get() un ndarray, intenta crear una matriz JSL que solo admite 1 o 2 dimensiones. Este error es específico de JMP 18.0, ya que JMP 14-17 transfirió los datos a través del sistema de archivos como un archivo binario temporal de dobles. Aunque 14-17 podrían perder datos si el número de dimensiones es mayor a 2.