Azure functions ModuleNotFoundError for python script in same folder.

Erfan Nariman 436 Reputation points
2020-11-02T02:29:17.473+00:00

I have the following project structure:
36600-image.png

My main.py looks as followed:

   python  
   import datetime  
   import logging  
   import azure.functions as func  
   from .process_data import export_to_azure, create_dataframe  
     
     
   def main(timer: func.TimerRequest) -> None:  
       utc_timestamp = datetime.datetime.utcnow().replace(  
           tzinfo=datetime.timezone.utc).isoformat()  
     
       # on timer run export data  
       df = create_dataframe()  
       export_to_azure(table_name="sdp_taken", schema="monday", df=df)  
     
       logging.info('Python timer trigger function ran at %s', utc_timestamp)  

When I have main.py as my main script to run and run func start, I get:

   [2020-11-02T02:19:58.327] Exception: ModuleNotFoundError: No module named 'monday'. Troubleshooting Guide: https://aka.ms/functions-modulenotfound  
   [2020-11-02T02:19:58.327] Stack:   File "/usr/local/Cellar/azure-functions-core-tools@3/3.0.2931/workers/python/3.8/OSX/X64/azure_functions_worker/dispatcher.py", line 262, in _handle__function_load_request  
   [2020-11-02T02:19:58.327]     func = loader.load_function(  
   [2020-11-02T02:19:58.327]   File "/usr/local/Cellar/azure-functions-core-tools@3/3.0.2931/workers/python/3.8/OSX/X64/azure_functions_worker/utils/wrappers.py", line 34, in call  
   [2020-11-02T02:19:58.327]     raise extend_exception_message(e, message)  
   [2020-11-02T02:19:58.327]   File "/usr/local/Cellar/azure-functions-core-tools@3/3.0.2931/workers/python/3.8/OSX/X64/azure_functions_worker/utils/wrappers.py", line 32, in call  
   [2020-11-02T02:19:58.327]     return func(*args, **kwargs)  
   [2020-11-02T02:19:58.327]   File "/usr/local/Cellar/azure-functions-core-tools@3/3.0.2931/workers/python/3.8/OSX/X64/azure_functions_worker/loader.py", line 76, in load_function  
   [2020-11-02T02:19:58.327]     mod = importlib.import_module(fullmodname)  
   [2020-11-02T02:19:58.327]   File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/importlib/__init__.py", line 127, in import_module  
   [2020-11-02T02:19:58.327]     return _bootstrap._gcd_import(name[level:], package, level)  
   [2020-11-02T02:19:58.328]   File "/Users/erfannariman/Workspace/zypp/monday/monday/main.py", line 4, in <module>  
   [2020-11-02T02:19:58.328]     from .process_data import export_to_azure, create_dataframe  
   [2020-11-02T02:19:58.328]   File "/Users/erfannariman/Workspace/zypp/monday/monday/process_data.py", line 3, in <module>  
   [2020-11-02T02:19:58.328]     from monday.api import request_data  

But, when I put all the code in one file and then run func start, everything works fine.

I am not sure how to solve this and what causes this, I read this thread, but that did not help.

function.json looks as followed:

   {  
     "scriptFile": "main.py",  
     "bindings": [  
       {  
         "name": "timer",  
         "type": "timerTrigger",  
         "direction": "in",  
         "schedule": "0 */5 * * * *"  
       }  
     ]  
   }  
Azure Functions
Azure Functions
An Azure service that provides an event-driven serverless compute platform.
5,911 questions
0 comments No comments
{count} vote

Accepted answer
  1. Erfan Nariman 436 Reputation points
    2020-11-02T12:29:57.167+00:00

    Apparently although the the script runs with

    from monday.process_data import process_func
    

    That will not work with azure functions. I had to change this to:

    from .process_data import process_func
    
    1 person found this answer helpful.

3 additional answers

Sort by: Most helpful
  1. Erfan Nariman 436 Reputation points
    2020-11-02T09:14:54.133+00:00

    @JayaC-MSFT it's not solvable with pip install since it's just my own written script in the same folder, see screenshot. For example I am loading process_data.py in main.py. The import error is not about an external package which I pip installed. Here's an simplified example:

    monday/process_data.py:

       def process_func():  
           # do some data processing  
    

    Then in monday/main.py:

       from monday.process_data.py import process_func  
         
       # do something with the process_func  
    

    I also tried from .proccess_data import process_func, but that did not help either.

    Import note: when I run the python script without func start, everything works fine and it finds the other scripts/modules. So it is a problem that occurs when running func start

    0 comments No comments

  2. Shalom 1 Reputation point
    2021-08-09T13:57:13.047+00:00

    Hi @Erfan Nariman ,
    Did you solve this problem?
    I had the same problem as you.


  3. Nuno Nogueira 76 Reputation points
    2022-09-12T17:19:47.123+00:00
    0 comments No comments

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.