【问题标题】:Catboost on Google AppEngine Python Flexible EnvironmentGoogle AppEngine Python 灵活环境上的 Catboost
【发布时间】:2018-04-24 16:59:03
【问题描述】:

我正在尝试设置一个简单的 Google AppEngine 应用程序,该应用程序将通过 POST 请求获取 JSON 数据并应用 Catboost 分类器。

我使用的是 Python 3.6,我已将 catboost==0.8 包含在我的 requirements.txt 文件中。

但是,部署失败:

ERROR: (gcloud.app.deploy) Error Response: [9]
Application startup error:
[2018-04-24 16:42:04 +0000] [1] [INFO] Starting gunicorn 19.7.1
[2018-04-24 16:42:04 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
[2018-04-24 16:42:04 +0000] [1] [INFO] Using worker: sync
[2018-04-24 16:42:04 +0000] [9] [INFO] Booting worker with pid: 9
[2018-04-24 16:42:05 +0000] [9] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/env/lib/python3.6/site-packages/gunicorn/arbiter.py", line 578, in spawn_worker
    worker.init_process()
  File "/env/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/env/lib/python3.6/site-packages/gunicorn/workers/base.py", line 135, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/env/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/env/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/env/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/env/lib/python3.6/site-packages/gunicorn/util.py", line 352, in import_app
    __import__(module)
  File "/home/vmagent/app/main.py", line 8, in <module>
    from catboost import CatBoostClassifier, Pool
  File "/env/lib/python3.6/site-packages/catboost/__init__.py", line 1, in <module>
    from .core import Pool, CatBoost, CatBoostClassifier, CatBoostRegressor, CatboostError, cv, train  # noqa
  File "/env/lib/python3.6/site-packages/catboost/core.py", line 50, in <module>
    _catboost = get_catboost_bin_module()
  File "/env/lib/python3.6/site-packages/catboost/core.py", line 46, in get_catboost_bin_module
    import _catboost
  ModuleNotFoundError: No module named '_catboost'

我的基础 Dockerfile 如下:

FROM gcr.io/google-appengine/python

# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
RUN virtualenv /env -p python3

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

RUN apt-get update; \
        apt-get install -y \
        build-essential \
        python-dev \
        python-setuptools \
        python-matplotlib \
        libatlas-dev \
        curl \
        ssh \
        libatlas3gf-base && \
        apt-get clean

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

我怀疑问题出在sys.modules 上,它在导入catboost 时没有注册_catboost。 在 Google AppEngine 柔性环境中,有没有办法使用使用 C 库的第三方应用,例如 Catboost?

【问题讨论】:

  • 您是否按照其他步骤操作from the docs?
  • @Phix 这些是标准环境的步骤。我正在使用灵活的环境。不确定这些步骤是否适用。
  • 错过了那部分,抱歉!
  • 在 APP Engline Flex 中,可用的选项只是将库的依赖项添加到应用程序源目录中的 requirements.txt 文件中,正如您所提到的。该系统旨在使用 pip 在启动应用程序之前安装任何依赖项。如果这在应用引擎上不起作用,它是否有效locally?
  • @oakinlaja 当然,本地一切正常。此外,使用 Google App Engine 上的 Python 2.7 一切正常。这只是因为 Python 3.6 导入 Catboost 失败。而且我认为问题是由于 App Engine 使用的 Debian 发行版没有可用的 libpython3.6。目前只有 libpython3.4。

标签: python google-app-engine-python app-engine-flexible catboost


【解决方案1】:

AppEngine Flex 不支持 Python 3.6 + Catboost 没有技术原因,因为它完全由用户配置。 documentation 确认 App Engine Flex 支持 Python 3.6。这是因为 App Engine Flex 允许您将自己的容器发送到 Flex,或修改默认容器。您可以查看this link 了解如何修改默认容器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2019-02-08
    • 2018-12-25
    相关资源
    最近更新 更多