es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , ,

Answer

  1. Avatar for 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:

    source <ruta_al_entorno_virtual>/bin/activate
    

    Luego, ejecute el script de shell de nuevo y verifique si se resuelve el problema.

Comments are closed.