Error de ModuleNotFoundError al ejecutar un archivo python desde un script de shell.
Tengo un archivo de Python llamado download.py en el que estoy importando un módulo opc.
Ahora, este archivo de Python es invocado desde un script de shell llamado build.sh de la siguiente manera:
python3 $(pwd)/scripts/download.py -d $dir_name
Cuando ejecuto el script de shell, obtengo el siguiente error:
Traceback (most recent call last):
File “/home/ray/Desktop/repo/image-builder/scripts/download.py”, line 14, in
from opc.utils import file_utils, logger
ModuleNotFoundError: No module named ‘opc’
Así es como se invoca el script de shell:
sudo sh scripts/src/build.sh
Tengo un entorno virtual activo en el que he instalado este paquete. Y este paquete también está allí.
pip list
Package Version
attrs 21.2.0
.
.
opc 0.8.0
Curiosamente, cuando ejecuto el código de Python directamente como
python3 scripts/download.py -d dir_path
funciona bien. No obtengo el error de ModuleNotFoundError.
Además, esto también funciona bien:
❯ python3
Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type “help”, “copyright”, “credits” or “license” for more information.
import opc.utils.global_vars as g
print(g.LOCAL_HOST)
127.0.0.1
Estructura de directorios:
/home/ray/Desktop/repo/image-builder/scripts/download.py
/home/ray/Desktop/repo/image-builder/scripts/src/build.sh
y estoy ejecutando comandos desde:
/home/ray/Desktop/repo/image-builder
davy.ai
Solución
Parece que el problema está relacionado con el entorno en el que se está ejecutando el script de shell. Es posible que el entorno virtual no esté activado cuando se esté ejecutando el script de shell.
Para solucionar este problema, puede intentar activar el entorno virtual antes de ejecutar el script de shell. Puede hacer esto ejecutando el siguiente comando:
Luego, ejecute el script de shell de nuevo y verifique si se resuelve el problema.