OSError: [Errno 8] Ошибка формата Exec. Запуск скрипта Python в размещенном на Heroku веб-приложении - PullRequest
0 голосов
/ 01 ноября 2018

В настоящее время у меня есть функциональное веб-приложение NodeJS, работающее на Heroku dyno с двумя пакетами сборки (NodeJS и Python), которое должно позволять мне запускать скрипты как на JS, так и на Python.

У меня есть сценарий Python, который я хочу выполнить в virtualenv на Heroku dyno. Ниже приведено описание того, как я выполняю это.

Следующая функция Javascript инициирует start.py.

spawnPythonProcess(`${__dirname}/start.py`).then((data) => {
    console.log(data.toString());
}).catch((err) => {
    console.log(err.toString());
})

start.py запускает мой скрипт на python в virtualenv.

import subprocess
import os

curr_dirname = os.path.dirname(os.path.abspath(__file__))

python_bin = curr_dirname + '/ENV/bin/python3.7'
script_file = curr_dirname + '/ipos.py'

subprocess.Popen([python_bin, script_file])

К сожалению, я получаю следующую ошибку в журналах моего приложения, размещенного на Heroku.

Я получаю эту ошибку, потому что мой virtualenv (который я инициировал на своем Mac) не играет с серверами Heroku (который, как я предполагаю, работает под управлением Linux)? Был бы признателен, если бы кто-то мог объяснить ошибку немного яснее, чем я думаю.

Traceback (most recent call last):
File "/app/api/helpers/ipos/start.py", line 13, in <module>
subprocess.Popen([python_bin, script_file])
File "/app/.heroku/python/lib/python3.7/subprocess.py", line 756, in __init__
restore_signals, start_new_session)
File "/app/.heroku/python/lib/python3.7/subprocess.py", line 1499, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 8] Exec format error: '/app/api/helpers/ipos/ENV/bin/python3.7'

Traceback (most recent call last):
File "/app/api/helpers/ipos/start.py", line 13, in <module>
subprocess.Popen([python_bin, script_file])
File "/app/.heroku/python/lib/python3.7/subprocess.py", line 756, in __init__
restore_signals, start_new_session)
File "/app/.heroku/python/lib/python3.7/subprocess.py", line 1499, in _execute_child

Я также пытался добавить #!/usr/bin/env python к каждому файлу Python для этой записи , но я не думаю, что моя проблема та же.

Для некоторого контекста я подумал, что было бы неплохо иметь отдельное virtualenv для каждого скрипта Python, который я собирался запустить в своем веб-приложении, вместо того, чтобы хранить все свои зависимости в файле require.txt, чтобы сохранить зависимости локальными к каждому сценарию. Любые комментарии о том, почему это не очень хорошая идея, и предложения о том, как улучшить этот подход, также приветствуются. Основная идея заключается в том, что у меня есть веб-приложение NodeJS, которому необходимо периодически запускать некоторые скрипты Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...