В настоящее время я развертываю сервер на основе node.js в облачном движке Google, который вызывает скрипт python для обработки некоторых данных.
В качестве краткого обзора мой код выполняется следующим образом:
- Front-end html отправляет данные на сервер
- Сервер получает данные
- Node.js, вызывает python сценарий и передает данные в виде асинхронной c функции в фоновом режиме
- Обработка данных выполнена
Проблема:
В процессе 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
- Изменение рабочей среды на custom с nodejs
- Изменение файла 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
needs.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 часть - лишь малая часть приложения.
Я так растерялся, как решить эти проблемы.
Любая помощь будет принята.
Спасибо.