Sunday, November 14, 2021

[SOLVED] Shell Script For Python Throws ModuleNotFoundError

Issue

I'm trying to run a python script at start for my Raspberry Pi 3B. My shell script "atboot.sh" looks like this:

#!/bin/bash
cd /home/pi/pythoncodefolder
date >> logs
sudo python3 test.py >> logs

When I try to run it on cmd with sh atboot.sh command, I get an import error which is:

Traceback (most recent call last):
    File "test.py", line 5, in <module>
        import cv2
ModuleNotFoundError: No module named 'cv2'

But when I run the program on cmd without shell script, using python3 test.py, I get no errors.

Thanks.


Solution

The use of sudo causing it. When you run python3 program.py you invoke it in your $USER environment setup.

You can remove Defaults !env_reset from sudoers. Or to add Defaults env_keep += "PYTHONPATH".

But I would assert that you can do it without sudo in the first place.

#!/bin/bash
cd /home/pi/pythoncodefolder
date >> logs
python3 test.py >> logs

Also, that's probably a (not exact) duplicate.



Answered By - rawrex