JMP 14-17 attempt to utilize the Python installed on the user's system. This really only worked for Python.org versions and had difficulty if there was more than one version of Python installed on the system. If JMP correctly identified the Python version on the system everything worked fine... When it didn't, it was nearly impossible for the user to specify the necessary parameters to point to the Python version. JMP 14-17 only presented the interface through JSL scripting commands. It also lead scripts that were not portable because the receiver of the script may not have Python installed or an incompatible version.
JMP 18's goals were:
- To insure Python worked with JMP right out of the box, no configuration necessary.
- Every user of JMP 18 would have the same Python 3.11.x version, so scripting compatibility would cease to be a problem.
- Provide a Python centric environment vs a JSL only interface to Python,
- Provide easy installation of external Python packages to supplement JMP capabilities.
- Begin providing better data exchange between JMP and Python environments, especially in regard to Data Tables becoming Zero-copy references instead of copies of data transferred through the filesystem between environments.
To accomplish the Zero-copy integration of data tables requires we link with the Python shared library, that is what sets the requirement that only JMP provided embedded Python can be utilized.
JMP 19 is bundled with Python 3.13.x. JMP will continue to stay close to the current Python Releases due to bug-fixes and security updates. We do ship updated version of Python with our maintenance releases, we will always maintain the same Major.Minor version across the specific JMP version's release cycle.
JMP 20 will likely ship with 3.14.x
Think of the JMP environment as a JMP Specific virtual environment. There is nothing that precludes you from using the JMP Python to interact with an external Python environment. My suggestion would be to use the internal JMP Python to move data to a database, or pass it to the other Python environment via mmap ( shared memory ), sockets, ZeroMQ, ... lots of ways to get there without having to write data back to the filesystem.
At which point either JSL's RunProgram() or Python's multiprocessing can be utilized to launch the other Python environment.