Установка Java в Google App Engine с Python временем выполнения - PullRequest
2 голосов
/ 27 января 2020

Я новичок в Google App Engine. Я создал новый проект с python средой выполнения и использовал Flask для предоставления некоторых конечных точек API. Один из методов использует библиотеку python (tabula-py), которая зависит от Java (8+). Когда я запускал локально, все работало, но это не удается после развертывания в gcloud. Любые советы по настройке Java в App Engine? Я не могу установить его с помощью require.txt

Большое спасибо!

С уважением, Абхи

1 Ответ

1 голос
/ 27 января 2020

GAE запускает ваши приложения в контейнерах, которые по умолчанию имеют только среду выполнения, указанную в app.yaml. Однако вы можете установить пользовательскую среду выполнения с помощью Python и Java для запуска приложения.

Чтобы сделать это, вы должны использовать среду GAE Flexible и определить что-то вроде следующего в Dockerfile:

### 1. Get Linux
FROM alpine:3.7

### 2. Get Java via the package manager
RUN apk update \
&& apk upgrade \
&& apk add --no-cache bash \
&& apk add --no-cache --virtual=build-dependencies unzip \
&& apk add --no-cache curl \
&& apk add --no-cache openjdk8-jre

### 3. Get Python, PIP

RUN apk add --no-cache python3 \
&& python3 -m ensurepip \
&& pip3 install --upgrade pip setuptools \
&& rm -r /usr/lib/python*/ensurepip && \
if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
rm -r /root/.cache

ENV FLASK_APP main.py
ENV FLASK_RUN_HOST 0.0.0.0
ENV FLASK_RUN_PORT 8080
### Get Flask for the app
RUN pip install --trusted-host pypi.python.org flask

####
#### OPTIONAL : 4. SET JAVA_HOME environment variable, uncomment the line below if you need it

#ENV JAVA_HOME="/usr/lib/jvm/java-1.8-openjdk"

####

EXPOSE 8080
ADD main.py /
CMD ["flask", "run"]

Я протестировал пользовательскую среду выполнения и это сработало для меня, но я не смог протестировать библиотеку tabula-py, потому что по какой-то причине импорт не выполняется в моей среде (даже локально). Тем не менее, я считаю, что это должно работать.

Для справки, я основал свой Dockerfile на том, что в этом ответе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...