将 virtualenv 上传到 IBM Cloud Functions 时如何修复 ModuleNotFoundError?
How to fix ModuleNotFoundError when uploading virtualenv to IBM Cloud Functions?
我正在尝试使用安装了 opencv 的 virtualenv 将函数上传到 IBM Cloud Functions。但是,当我尝试 运行 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 运行时间。我认为这是一个库问题,因为这个 运行time 使用 Debian Stretch 并且我之前在使用 python:3-slim-strech docker 图像导入 opencv 时遇到了问题,因为它没有一些必需的库,如 libsm6、libxext6 和 libxrender。
但是,当我 运行 apt list
在 IBM 用于其 python:3.7 运行 的 docker image 时,它包含了那些库.
我使用显示的 docker 方法创建了 virtualenv here. 我使用的确切命令如下:
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 因为 the runtime already has numpy installed, 这是 opencv 的唯一依赖项,并且因为包含 numpy 的 zip 文件超过了 48MB 的限制,无法将其上传到 Cloud Functions。
我应该可以毫无问题地导入 cv2,但我仍然收到之前的消息。任何帮助都会很棒!
使用 virtualenv 文件夹来包含本地包不会在运行时自动 inherit the global site-packages。这可以在使用 virtualenv 命令时使用 --system-site-packages
标志启用。
将 Docker 命令更改为以下内容以使其工作:
docker run --rm -v "$PWD:/tmp" ibmfunctions/action-python-v3.7 /bin/bash -c
"cd tmp; virtualenv --system-site-packages virtualenv; source virtualenv/bin/activate;
pip install opencv-python;"
--no-deps
不再需要,因为全局 site-package.
已经满足了 numpy 依赖
使用更新后的 Docker 脚本执行您的命令现在对我有效。
确保为 OpenWhisk 操作分配足够的内存。我有问题 运行 默认 256MB 内存限制的代码。将其增加到 1024MB 解决了我遇到的所有问题。
我正在尝试使用安装了 opencv 的 virtualenv 将函数上传到 IBM Cloud Functions。但是,当我尝试 运行 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 运行时间。我认为这是一个库问题,因为这个 运行time 使用 Debian Stretch 并且我之前在使用 python:3-slim-strech docker 图像导入 opencv 时遇到了问题,因为它没有一些必需的库,如 libsm6、libxext6 和 libxrender。
但是,当我 运行 apt list
在 IBM 用于其 python:3.7 运行 的 docker image 时,它包含了那些库.
我使用显示的 docker 方法创建了 virtualenv here. 我使用的确切命令如下:
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 因为 the runtime already has numpy installed, 这是 opencv 的唯一依赖项,并且因为包含 numpy 的 zip 文件超过了 48MB 的限制,无法将其上传到 Cloud Functions。
我应该可以毫无问题地导入 cv2,但我仍然收到之前的消息。任何帮助都会很棒!
使用 virtualenv 文件夹来包含本地包不会在运行时自动 inherit the global site-packages。这可以在使用 virtualenv 命令时使用 --system-site-packages
标志启用。
将 Docker 命令更改为以下内容以使其工作:
docker run --rm -v "$PWD:/tmp" ibmfunctions/action-python-v3.7 /bin/bash -c
"cd tmp; virtualenv --system-site-packages virtualenv; source virtualenv/bin/activate;
pip install opencv-python;"
--no-deps
不再需要,因为全局 site-package.
使用更新后的 Docker 脚本执行您的命令现在对我有效。
确保为 OpenWhisk 操作分配足够的内存。我有问题 运行 默认 256MB 内存限制的代码。将其增加到 1024MB 解决了我遇到的所有问题。