Heroku无法绑定python javabridge(找不到javahome)



我正在尝试将我的第一个Plotly Dash应用程序(用Python编写(部署到Heroku。我在捆绑所有的包来编译应用程序时遇到了麻烦,目前使用的是Pythonjavabridge。

当我尝试部署我的应用程序时,即使在从requirements.txt中删除了python-javabridge之后,它仍然试图捆绑它,给我以下错误:

remote:        Collecting jeepney>=0.4.2; sys_platform == "linux"
remote:          Downloading jeepney-0.6.0-py3-none-any.whl (45 kB)
remote:        Collecting importlib-resources; python_version < "3.7"
remote:          Downloading importlib_resources-4.1.1-py3-none-any.whl (22 kB)
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-qllzoihk/python-javabridge/setup.py'"'"'; __file__='"'"'/tmp/pip-install-qllzoihk/python-javabridge/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'rn'"'"', '"'"'n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-xeh4coov
remote:                 cwd: /tmp/pip-install-qllzoihk/python-javabridge/
remote:            Complete output (11 lines):
remote:            Traceback (most recent call last):
remote:              File "<string>", line 1, in <module>
remote:              File "/tmp/pip-install-qllzoihk/python-javabridge/setup.py", line 412, in <module>
remote:                ext_modules=ext_modules(),
remote:              File "/tmp/pip-install-qllzoihk/python-javabridge/setup.py", line 96, in ext_modules
remote:                java_home = find_javahome()
remote:              File "/tmp/pip-install-qllzoihk/python-javabridge/javabridge/locate.py", line 133,
in find_javahome
remote:                java_bin = get_out(["bash", "-c", "type -p java"])
remote:              File "/tmp/pip-install-qllzoihk/python-javabridge/javabridge/locate.py", line 130,
in get_out
remote:                raise Exception("Error finding javahome on linux: %s" % cmd)
remote:            Exception: Error finding javahome on linux: ['bash', '-c', 'type -p java']
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

我所做的:

只要运行pip install javabridge就可以完美工作,没有问题。

我将JAVA_HOME添加到我的系统变量和路径中,但没有帮助。在cmd上写入javacjava --version会输出预期的版本。

我使用Windows 10、Python 3.7、Anaconda3、Spyder终端来运行命令。

如果您想在Heroku上使用Python应用程序中的Java,则需要使用多个构建包。注意

应用程序的语言的构建包应始终是列表中的最后一个构建包。这样可以确保应用该主要语言的默认值,而不是另一种语言的默认设置,并允许Heroku正确检测应用程序的主要语言。

因此,在这种情况下,执行类似的操作

PS C:> heroku buildpacks:set heroku/python
PS C:> heroku buildpacks:add --index 1 heroku/jvm

如果运行heroku buildpacks,现在应该会看到JVM构建包列在第一位,Python构建包列第二位。请注意,我们在这里使用的是heroku/jvm,而不是heroku/java,因为您没有构建Java应用程序。

完成此操作后,您需要重新部署应用程序。如果你有更改要做,那就去做,然后提交,然后推动。

请注意,即使您在requirements.txt中没有直接依赖Java桥,例如,如果您的某个依赖项依赖它,您的应用程序也可能需要使用Java桥。

最新更新