For my python script I need to change the user. Therefore I start the script with:
sudo -u eval python3 run_aufgabe2.py
there is no problem running the script until I import modules from the same directory, then I get an import-error:
$ Traceback (most recent call last):
$ File "run_aufgabe2.py", line 5, in <module>
$ import aufgabe2
$ ImportError: No module named 'aufgabe2'
Running the script without sudo -u eval
, the import is working and the script is running without errors. I first thought about a permission problem, maybe the the user eval
can not read the file aufgabe2.py
, so I changed the rights:
$ -rwxrwxrwx 1 root root 3583 Apr 12 09:08 aufgabe2.py
$ -rwxrwxrwx 1 root root 0 Apr 12 09:08 __init__.py
$ -rwxrwxrwx 1 root root 432 Apr 12 09:43 run_aufgabe2.py
But still the same error, I can not think of anything more, but I am sure I am missing something.
Edit 1:
I have to kinds of shell scripts to run the python scripts.
Bash script for simple scripts:
#!/bin/bash
cd $1
sudo -u eval python3 $2
Expect script for dynamic userinputs:
#!/usr/bin/expect
cd [lindex $argv 0]
spawn sudo -u eval python3 [lindex $argv 1]
#[...]
As @FlyingTeller hast mentioned in his commands, I have the option to add the current working dir to the PYTHONPATH variable. I couldn't get this running, maybe someone can help me with the shell scripts.
Thanks a lot!
As @FlyingTeller has mentioned, usually the directory you are running the script in, get's added to sys.path
. Seems like sudo -u eval
messed with that somehow. The solution is adding path manually:
import sys
sys.path.append(".")