Heroku 无法捆绑 python-javabridge(未找到 javahome)

Heroku fails to bundle python-javabridge (javahome not found)

我正在尝试将我的第一个 Plotly Dash 应用程序(用 Python 编写)部署到 Heroku。我在捆绑所有包来编译应用程序时遇到问题,目前使用 Python-javabridge.

当我尝试部署我的应用程序时,即使从 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('"'"'\r\n'"'"', '"'"'\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

我做了什么:

只是 运行ning pip install javabridge 完美运行,没问题。

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

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

如果您想在 Heroku 上的 Python 应用程序中使用 Java,则需要使用 multiple buildpacks。注意

The buildpack for the primary language of your app should always be the last buildpack in the list. This ensures that defaults for that primary language are applied instead of those for another language, and allows Heroku to correctly detect the primary language of your app.

所以在这种情况下,做类似的事情

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

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

执行此操作后,您需要重新部署您的应用程序。如果您要进行更改,请继续进行,然后提交并推送。

请注意,您的应用程序可能需要使用 Java 桥,即使您在 requirements.txt 中并不直接依赖它,例如如果您的依赖项之一依赖于它。