【发布时间】:2020-06-14 08:53:06
【问题描述】:
我目前正在谷歌云应用引擎上部署基于 node.js 的服务器,该引擎调用 python 脚本来处理一些数据。
作为简要概述,我的代码是这样执行的:
- 前端 html 向服务器发布数据
- 服务器接收数据
- Node.js 调用 python 脚本并在后台将数据作为异步函数传递
- 数据处理完成
问题:
python 进程使用本地导入的 numpy 和 matplotlib 库。
但在部署时,似乎无法在 App Engine 上导入这些库。
我收到的错误:
Error: ImportError: No module named numpy
at PythonShell.parseError (/app/node_modules/python-shell/index.js:260)
at terminateIfNeeded (/app/node_modules/python-shell/index.js:139)
at ChildProcess.<anonymous> (/app/node_modules/python-shell/index.js:131)
at ChildProcess.emit (events.js:198)
at Process.ChildProcess._handle.onexit (child_process.js:248)
我尝试过的事情:
- 在 app.yaml 中
- 将运行环境从 nodejs 更改为 custom
- 修改 docker 文件并尝试在那里安装 numpy。
在 dockerfile 顶部添加的行:
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
requirements.txt:
numpy==1.6.1
它编译得很好,但仍然给了我
Error: ImportError: No module named numpy
错误。
- 在 python 进程上,预先启动一个 python 进程并尝试在初始化主处理脚本之前安装 numpy(我知道这不是一个好主意,因为它会在每次进程发生时下载 numpy,但我迫切希望得到它至少以任何可能的方式工作)
const spawn = require("child_process").spawn;
pythonProcess = spawn('python',["-m","pip", "install", "numpy", "matplotlib"]);
会产生这样的错误:
Error: Python Process Recieved: /usr/bin/python: No module named pip
at Socket.pythonProcess.stderr.on (analysis.js:286)
at Socket.emit (events.js:198)
at addChunk (_stream_readable.js:288)
at readableAddChunk (_stream_readable.js:269)
at Socket.Readable.push (_stream_readable.js:224)
at Pipe.onStreamRead (internal/stream_base_commons.js:94)
我已经在线阅读了一些文档,如果您正在运行 runtime:python27 并在那里添加库,似乎可以导入这些库,但我的应用程序是 99% node.js,python 处理部分只是其中的一小部分应用程序。
我不知道如何解决这些问题。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: python node.js docker google-app-engine