App Engine:ImportError:没有名为 _gdal 的模块

Posted

技术标签:

【中文标题】App Engine:ImportError:没有名为 _gdal 的模块【英文标题】:App Engine: ImportError: No module named _gdal 【发布时间】:2019-04-21 20:55:06 【问题描述】:

如何在 Google App Engine 标准中启用像 GDAL 这样的 python 2.7 库?目前在应用引擎的 lib-folder 中有 linux python-modules,但是当尝试通过端点运行代码时,应用引擎会给出内部服务器错误:ImportError: No module named _gdal。我正在使用 pygdal 版本 2.2.3.3。 libgdal(需要pygdal)是否也应该安装在应用程序引擎上,如果是,怎么做?我按照these 使用以下语法的指令将GDAL 本地安装到lib 文件夹中(在windows10 上使用ubuntu bash):sudo pip install --target lib --requirement requirements.txt --ignore-installed,正如它所说的here。请帮忙!

【问题讨论】:

欢迎来到 SO!请花点时间通过***.com/help/asking。 标准环境? 标准环境是的。 感谢您的欢迎! 【参考方案1】:

来自What compiler can I use to build GDAL/OGR?

GDAL/OGR 是用 ANSI C 和 C++ 编写的。可以用all modern C/C++ compilers编译。

这意味着它与(第一代/python 2.7)标准环境Pure Python沙盒要求不兼容:

Python 运行环境的所有代码都必须是纯 Python,并且 不包括任何 C 扩展或其他必须编译的代码。

您可能希望改为查看柔性环境。可能带有自定义运行时,请参阅Up-to-date pip with AppEngine Python flex env?

【讨论】:

谢谢,我试试看。 我收到错误:ImportError: No module named osgeo.我设法使用以下方法安装了 gdal:***.com/questions/46348004/… How to use that version of gdal in python?我目前正在使用: from osgeo import osr 实际上应该将相同的配方应用于osgeo(或任何其他类似的依赖项)。您必须“合并” docker 大楼,使其最后只有一个 dockerfile【参考方案2】:

Google App Engine 的 Python27 标准环境仅支持一组特定的使用 C 扩展的第三方库,列于here。 pygdal 不在列表中。

您可能想查看 Python3 标准运行时,尽管它位于 beta 中。它允许您安装任意第三方库。

【讨论】:

感谢您的回答!根据此,pygdal 似乎仅适用于 python 2:pypi.org/project/pygdal,那么对于 python 3.7,什么是等效的?我已经尝试了所有方法,但在 App Engine 中安装 GDAL 似乎是不可能的。 可能有效,但前提是GDAL作为pip可安装的python库提供,请参阅cloud.google.com/appengine/docs/standard/python3/… @samuq,我没有意识到它只是 Python2。 GAE 灵活环境还允许您安装任意包,但基本上是通过构建 Docker 容器。 This 答案似乎对构建这样一个容器很有用。 @AndrewFiorillo,谢谢,我会试试那个解决方案(灵活的环境 + Docker 容器)。【参考方案3】:

修改 this 链接的答案我设法让 GDAL 在 App Engine Flexible 中工作。 我的码头文件:

FROM gcr.io/google-appengine/python

RUN apt-get update && apt-get -y install libproj-dev libgdal-dev 
RUN export CPLUS_INCLUDE_PATH=/usr/include/gdal
RUN export C_INCLUDE_PATH=/usr/include/gdal
RUN gdal-config --version
# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
RUN virtualenv /env -p python2.7

# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
ADD requirements.txt requirements.txt
RUN pip install -r requirements.txt
# Add the application source code.
ADD . /app

CMD gunicorn -t 120 -b :$PORT main:app

我的 app.yaml 文件:

runtime: custom
env: flex
entrypoint: gunicorn -t 120 -b :$PORT main:app
endpoints_api_service:
    name: xxxxx.com
rollout_strategy: managed
beta_settings:
    cloud_sql_instances: project:europe-north1:dbinstance
runtime_config:
    python_version: 2

requirements.text 文件:

pygdal==1.11.3.3

【讨论】:

以上是关于App Engine:ImportError:没有名为 _gdal 的模块的主要内容,如果未能解决你的问题,请参考以下文章

本地 Google App Engine:ImportError:没有名为 google.cloud.bigquery 的模块

带有 Twilio 的 Google App Engine:ImportError:没有名为 pytz 的模块 [重复]

如何防止 Google App Engine 上出现“ImportError:没有名为 oauth2client.client 的模块”?

Eclipse 和 Google App Engine:ImportError:没有名为 _sysconfigdata_nd 的模块;无法识别的参数:--high_replication

如何在Google App Engine上防止“ImportError:没有名为oauth2client.client的模块”?

App Engine Python 2.7 - ImportError:无法导入名称 apiproxy