apache / openwhisk

Apache OpenWhisk is an open source serverless cloud platform
https://openwhisk.apache.org/
Apache License 2.0
6.55k stars 1.17k forks source link

Python:3 virtualenv load failing probably #5480

Open singhsegv opened 6 months ago

singhsegv commented 6 months ago

I am trying to deploy a basic python action with an included virtualenv. I followed this official tutorial of using openwhisk/python3action container to create a virtualenv and zipping it with main .py file. But i still get an module not found error while actually running that action.

Environment details:

Steps to reproduce the issue:

  1. Follow the Packaging Python actions with a virtual environment in zip files step from this official tutorial https://github.com/apache/openwhisk/blob/master/docs/actions-python.md#packaging-python-actions-with-a-virtual-environment-in-zip-files
  2. Add networkx or any other non standard module.
  3. Create an action and try invoking it

Provide the expected results and outputs:

Provide the actual results and outputs:

 "logs": [
        "2024-05-01T17:42:09.338809562Z stdout: Traceback (most recent call last):",
        "2024-05-01T17:42:09.338871934Z stdout:   File \"exec__.py\", line 44, in <module>",
        "2024-05-01T17:42:09.33888039Z  stdout:     from main__ import main as main",
        "2024-05-01T17:42:09.338884751Z stdout:   File \"/action/1/bin/main__.py\", line 1, in <module>",
        "2024-05-01T17:42:09.338889153Z stdout:     import networkx as nx",
        "2024-05-01T17:42:09.338892881Z stdout: ModuleNotFoundError: No module named 'networkx'",
        "2024-05-01T17:42:09.355858711Z stdout: Command exited abruptly during initialization.",
        "2024-05-01T17:42:09.430444173Z stderr: The action did not initialize or run as expected. Log data might be missing."
    ],

Additional information you deem important:

rabbah commented 6 months ago

Are you sure you're using the same python version in your venv as the action's runtime?

singhsegv commented 6 months ago

Yep the python versions were same. The problem turned out that I was adding a venv folder with the main.py and not requirements.txt and after digging a little deeper into the openwhisk-runtime-python source code here, I am guessing it is something related to def virtualenv(tgt_dir): function implemention.

I am not 100% sure though as I haven't setup a debugger to figure out the code flow. Will update this thread as soon as I get some free time.