python-javabridge icon indicating copy to clipboard operation
python-javabridge copied to clipboard

ModuleNotFoundError: No module named 'numpy' - heroku deployment

Open Isquare1 opened this issue 4 years ago • 5 comments

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!

Isquare1 avatar Jan 10 '21 21:01 Isquare1

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

BjarneHerland avatar Sep 20 '22 12:09 BjarneHerland

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?

m-martin-j avatar Jan 04 '23 15:01 m-martin-j

Hello, Has this issue been solved ?

otchita-owkin avatar Jul 24 '23 11:07 otchita-owkin

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

orgonth avatar Sep 12 '23 14:09 orgonth

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

sebnarvaez19 avatar Jul 09 '24 19:07 sebnarvaez19