Я пытаюсь загрузить функцию в IBM Cloud Functions с помощью virtualenv, на котором установлена opencv. Однако, когда я пытаюсь запустить действие в IBM Cloud, оно говорит:
{
"error": "Traceback (most recent call last):
File \"/action/1/src/exec__.py\", line 43, in <module>
from main__ import main as main
File \"/action/1/src/main__.py\", line 1, in <module>
import requests, base64, json, cv2\nModuleNotFoundError: No module named 'cv2'"
}
Для этого я использую Python: 3.7. Я думал, что это проблема с библиотекой, так как в этой среде выполнения используется Debian Stretch, и у меня были проблемы с импортом opencv с помощью образа докера 3-slim-strech, поскольку у него не было некоторых необходимых библиотек, таких как libsm6, libxext6 и libxrender.
Однако, когда я запустил apt list
в образе докера , который IBM использует для своего питона: 3.7, он включил эти библиотеки.
Я создал virtualenv, используя метод докера, показанный здесь . Точная команда, которую я использовал, была следующей:
docker run --rm -v "$PWD:/tmp" ibmfunctions/action-python-v3.7 /bin/bash -c
"cd tmp; virtualenv virtualenv; source virtualenv/bin/activate;
pip install --no-deps opencv-python;"
Я использовал --no-deps, потому что во время выполнения уже установлена numpy, , которая является единственной зависимостью opencv, и потому что с включенным numpy размер файла zip превысил ограничение в 48 МБ для загрузки его в облачные функции.
Я должен быть в состоянии импортировать cv2 без проблем, но я все еще получаю предыдущее сообщение. Любая помощь будет отличной!