GAE部署错误:没有名为“ tabula”的模块

如何解决GAE部署错误:没有名为“ tabula”的模块

首先,我使用Python运行时创建了一个新项目,并使用Flask公开了一些API端点。其中一种方法使用Python库(tabula-py), 我读过here,因为tabula-py需要Java8 +, 我必须选择具有自定义运行时的灵活环境。

因此,我做了一个Dockerfile(如下所示),但是不幸的是,在将应用程序部署到gcloud时仍然出现此错误。我不得不说,本地代码可以完美地运行,但是当我使用“ gcloud app deploy”时,我会收到此错误

Error: While importing "main",an ImportError was raised:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/flask/cli.py",line 240,in locate_app
__import__(module_name)
File "/main.py",line 4,in <module>
import tabula
ModuleNotFoundError: No module named 'tabula'

main.py

import tabula
.
.
.
df = tabula.read_pdf(str(latest_file),pages=1)  ## transforming into list of dataframes.

app.yaml

runtime: custom
env: flex
env_variables:
 FLASK_APP : 'main.py'

Dockerfile

FROM python:3
RUN pip uninstall tabula && \
    pip install --upgrade pip && \
    pip install --no-cache-dir Flask pyvirtualdisplay python-environ Datetime && \
    pip install --no-cache-dir glob3 pandas-gbq pandas schedule && \
    pip install --no-cache-dir tabula-py beautifulsoup4 Datetime urllib3 && \
    pip install --no-cache-dir gunicorn Werkzeug && \
    pip install --upgrade pip --user && \
    pip3 uninstall -y tabula-py && \
    pip3 install tabula-py
    ### 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"]

解决方法

所以我花了一段时间才弄清楚出了什么问题。 但显然在docker文件中命令的顺序是问题所在。

FROM python:3
RUN pip uninstall tabula && \
    pip install --upgrade pip && \
    pip install --no-cache-dir Flask pyvirtualdisplay python-environ 
Datetime && \
    pip install --no-cache-dir glob3 pandas-gbq pandas schedule && \
    pip install --no-cache-dir tabula-py beautifulsoup4 Datetime 
urllib3 && \
    pip install --no-cache-dir gunicorn Werkzeug && \
    pip install --upgrade pip --user && \
    pip3 uninstall -y tabula-py && \
    pip3 install tabula-py
    ### 1. Get Linux

在iv'的第一部分中,安装了所有python库,但之后, 我删除了所有已安装的python东西,

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

所以解决方案是删除此部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?