Stewori / JyNI

Enables Jython to load native CPython extensions.
https://jyni.12hp.de
Other
150 stars 17 forks source link

How to correcty install and use JyNI with numpy support on Jython? #39

Open Daniel-Alievsky opened 2 years ago

Daniel-Alievsky commented 2 years ago

Hello,

I don't understand well the sequence of steps to start usage of JyNI with numpy (Windows platform). I already created an issue on Jython site: https://bugs.jython.org/issue2930 But I'm not sure that it is a correct place, maybe it is question to you.

I read your paper https://arxiv.org/pdf/1607.00825v1.pdf and tried to reproduce the simplest example:

import sys sys.path.append(’path_to_numpy1.12_pre-release’) import numpy as np a = np.array([2, 5, 7]) ...

But what is here the 'path_to_numpy1.12'? Where should I place the content of your archive JyNI-2.7-alpha.5-bin-win-amd64.zip ? Now I just unpacked it and placed both files into C:\JyNI , then added this directory to sys.path.append. But it seems that it is not a right way. Results are the following:

Traceback (most recent call last): File "C:/siams/computer-vision/stare-python/jython-experiments/net/algart/jython/tests/SimpleJythonNumpyTest.py", line 3, in import numpy as np File "C:\jython2.7.2\Lib\site-packages\numpy__init.py", line 142, in from . import core File "C:\jython2.7.2\Lib\site-packages\numpy\core\init__.py", line 71, in raise ImportError(msg) ImportError:

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the multiarray numpy extension module failed. Most likely you are trying to import a failed build of numpy. Here is how to proceed:

Original error was: No module named _multiarray_umath

Daniel-Alievsky commented 2 years ago

It seems that the previous problem was connected with too late version of Numpy: it was 1.16. As you recommend, I switched to Numpy 1.13.3. Jython currently cannot install numpy, but I found workaround: installed Python 2.7.9, installed their Numpy 1.13.3 and copied the folders numpy and numpy-1.13.3.dist-info from Python's directory site-packages into the same directory of Jython.

Now my test SimpleJythonNumpyTest.py consists of only 1 line: import numpy as np I call it via the following command: java -cp C:\jython2.7.2\jython.jar;C:\JyNI\JyNI.jar org.python.util.jython SimpleJythonNumpyTest.py

Java version: "17.0.2" 2022-01-18 LTS Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86) Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)

Numpy is successully imported, but the result is the system crash: see hs_err_pid8120.log hs_err_pid8120.log

Stewori commented 2 years ago

Hello Daniel, thank you for your interest in JyNI. However, if your goal is to do data-science beyond some numpy-numerics, Jython+JyNI is probably not sufficient. Already SciPy does not work and NumPy only works for a narrow set of versions and somewhat limited functionality. That JyNI is experimental is indicated by the "alpha" in the version name.

copied the folders numpy and numpy-1.13.3.dist-info from Python's directory site-packages into the same directory of Jython.

Yes, that is much how I used to do it. Using CPython 2.7 pip to install NumPy and dependencies is my recommended way. Then simply add the path to Jython's library path (sys.path.append(...)). No need to copy things around. E.g. from my setup:

sys.path.append('C:/Program Files/Python/Python2.7.13/Lib/site-packages')
sys.path.append('C:/Program Files/Python/Python2.7.13/DLLs')

Alternatively, one can build NumPy from source (in-place build!) (easy on Linux, difficult on Windows) and put that folder on the library path.

Anyway. There are plenty of reasons for broken config. Last but not least I never tested on recent Java (also because Jython itself used to have issues with recent Java). Easiest way to check out JyNI with NumPy is a stand-alone image I do not distribute publicly. Write to me at contact@jyni.org.