Я пытаюсь загрузить функцию в 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 с изображением докера python: 3-slim-strech, поскольку в нем не было некоторых необходимых библиотек, таких как libsm6, libxext6 и libxrender.
Однако когда я запустил apt list
в образе докера, IBM использует для своей среды выполнения python: 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 МБ, чтобы загрузить его в Cloud Functions.
Я смогу импортировать cv2 без проблем, но все равно получаю предыдущее сообщение. Любая помощь была бы замечательной!