CellProfiler / python-javabridge

Python wrapper for the Java Native Interface
Other
21 stars 11 forks source link

ModuleNotFoundError: No module named 'numpy' - heroku deployment #11

Open Isquare1 opened 3 years ago

Isquare1 commented 3 years ago

Hi, I'm deploying a web app to heroku and the app seems to require python-javabridge (not javabridge). As it tries to download python-javabridge-4.0.0.tar.gz to its server, I get the error:

remote:        Collecting python-javabridge==4.0.0
remote:          Downloading python-javabridge-4.0.0.tar.gz (1.3 MB)
remote:            ERROR: Command errored out with exit status 1:
remote:             command: /app/.heroku/python/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-um4hs34c/python-javabridge/setup.py'"'"'; __file__='"'"'/tmp/pip-install-um4hs34c/python-javabridge/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-bn8fvmq1
remote:                 cwd: /tmp/pip-install-um4hs34c/python-javabridge/
remote:            Complete output (7 lines):
remote:            Traceback (most recent call last):
remote:              File "<string>", line 1, in <module>
remote:              File "/tmp/pip-install-um4hs34c/python-javabridge/setup.py", line
412, in <module>
remote:                ext_modules=ext_modules(),
remote:              File "/tmp/pip-install-um4hs34c/python-javabridge/setup.py", line
100, in ext_modules
remote:                from numpy import get_include
remote:            ModuleNotFoundError: No module named 'numpy'
remote:            ----------------------------------------
remote:        ERROR: Command errored out with exit status 1: python setup.py egg_info
Check the logs for full command output.
remote:  !     Push rejected, failed to compile Python app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:

I read around this error and it seems to be a common issue that the get_include function is called from the setup.py file of a package before numpy has been installed, however, I am not sure how to fix it myself (or to verify this is indeed the problem here). Of course I have pip installed numpy and python-javabridge on my local machine and this works fine, but not sure what happens when it tries to install it on the heroku server. I'm using Anaconda 3 Python 3.7 and Spyder IDE (and Spyder terminal for the commands).

Any help will be appreciated!

BjarneHerland commented 1 year ago

It looks like this issue was initially fixed (by the upstream repo) in https://github.com/CellProfiler/python-javabridge/commit/e9fe3dc8e62d03521786facbdba9ba2587d3dda5 but accidentally re-introduced by https://github.com/CellProfiler/python-javabridge/commit/7cd83b78d12cab30abecd9e58294b4cb61c42081. The result does not work prpoerly with the in-built Python distutils.

By first installing setuptools and numpy (pip install setuptools numpy) I am able to cleanly install python-javabridge with pip. Installing setuptools may be unnecessary if https://github.com/CellProfiler/python-javabridge/pull/17 is landed, but pre-installing numpy still seems to be required (for some reason). A starting-point for proper PEP 621 setup can be found in https://github.com/CellProfiler/python-javabridge/pull/18

m-martin-j commented 1 year ago

Errors when installing via poetry still cause headaches highly similar to this one - I would be curious if #18 would solve this. Please, is there any chance you could review this @bethac07?

otchita-owkin commented 11 months ago

Hello, Has this issue been solved ?

orgonth commented 10 months ago

Same issue (python 3.8 and 3.9), running pip install numpy first does not help.

The only way I could complete the install was reverting to an older version of pip:

python -m pip install pip==22.0.4
pip install numpy==1.23.0
pip install python-javabridge==4.0.3
sebnarvaez19 commented 1 week ago

I had the same issue with Python 3.12, but using Python 3.10 I handled it