【问题标题】:How to build docker to run Python3 from Node.js child_process in Google App Engine?如何构建 docker 以从 Google App Engine 中的 Node.js child_process 运行 Python3?
【发布时间】:2020-06-16 10:37:47
【问题描述】:

我正在使用 flex 环境在自定义运行时上部署 node.js Web 应用程序。我在 Node.js 中调用 child_process 来打开 python3:

const spawn = require("child_process").spawn;
pythonProcess = spawn('python3');

本地运行良好,但部署到 GAE 时,出现如下错误:

Error: spawn python3 ENOENT
   at Process.ChildProcess._handle.onexit (child_process.js:240)
   at onErrorNT (internal/child_process.js:415)
   at process._tickCallback (next_tick.js:63)

但是,当我运行 python2 时,它运行良好。

在做了一些研究和挖掘之后,我在stackoverflow上遇到了这个问题

How to install Python3 in Google Cloud Platform for a Node app

看来我必须通过 从 docker 文件构建自定义运行时 来允许多个运行时(类似的东西)。

我用 docker 文件尝试了无数的东西,例如:

# Trying to install python3
FROM ubuntu as stage0
WORKDIR /python/
RUN apt-get update || : && apt-get install --yes python3;
RUN apt-get install python3-pip -y

# My main node.js docker stuff 
FROM gcr.io/google_appengine/nodejs
COPY . /app/
... etc

# From google app engine python runtime docker repo
FROM gcr.io/google-appengine/python
RUN virtualenv /env
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt
ADD . /app

# My main node.js docker stuff 
FROM gcr.io/google_appengine/nodejs
COPY . /app/
... etc

这些都没有用。

这样做的正确方法是什么,我该怎么做?

谢谢。

【问题讨论】:

    标签: python node.js docker google-app-engine runtime


    【解决方案1】:

    Google's image 基于 ubuntu 但只有 python 2 和 2.7。 This answer 展示了如何使用 python3.6,但我们将通过 software-properties-common 安装 3.5。把所有东西放在一起,你会得到:

    FROM launcher.gcr.io/google/nodejs
    # same as
    # FROM gcr.io/google-appengine/nodejs
    
    
    RUN apt-get update && apt-get install software-properties-common -y
    # RUN unlink /usr/bin/python
    # RUN ln -sv /usr/bin/python3.5 /usr/bin/python
    # RUN python -V
    RUN python3 -V
    
    # Copy application code.
    COPY . /app/
    
    # Install dependencies.
    RUN npm --unsafe-perm install
    

    如果你只是要从你的 spawn 中调用 python3,你不需要取消我包含的链接(注释行),这样你就可以调用 python。

    【讨论】:

    • 哇,成功了,谢谢!!如果您不介意,还有一个问题。您是否还知道如何安装 python3 库并同时使用它们?谢谢!!
    • 嘿...对于 python,您需要 pip 作为包管理器,与节点的 NPM 相同。也许在它周围谷歌。我一直不太清楚如何为他们处理多个 python 和点子对不起:( 有空的时候我会看看
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多