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.

El script de Python falla al importar mysql.connector cuando se ejecuta desde Lua.

Tengo un script de Python que intento ejecutar desde Openresty/Lua con el siguiente bloque de ubicación de Nginx:

location / {
    access_by_lua_block {
    ngx.req.read_body()
    local request = ngx.req.get_body_data()
    io.popen("python3 /www/test.py '" .. request .. "'")
        }
}

Contenido del script:

#!/usr/bin/python3
import sys
import json
(...)
  • Ejecución desde la línea de comandos => funciona
  • Ejecución desde Lua => funciona

Pero si intento importar mysql.connector, ya no funciona desde Lua, aunque sigue funcionando desde la línea de comandos:

#!/usr/bin/python3
import sys
import json
import mysql.connector
(...)
  • Ejecución desde la línea de comandos => funciona
  • Ejecución desde Lua => falla / registro:
Traceback (most recent call last):
  File "/www/test.py", line 4, in <module>
    import mysql.connector
ModuleNotFoundError: No module named 'mysql'

Entonces, ¿qué me estoy perdiendo aquí?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el script de Python no puede encontrar el módulo mysql.connector cuando se ejecuta desde Openresty/Lua. Esto podría ser debido a diferencias en las variables de entorno o en los paquetes de Python instalados en el sistema al ejecutar el script desde la línea de comandos, en comparación con cuando se ejecuta desde Openresty/Lua.

    Para solucionar este problema, podrías intentar ejecutar el siguiente comando desde la línea de comandos para verificar si mysql.connector está instalado en el entorno de Python:

    python3 -c "import mysql.connector"
    

    Si este comando no devuelve errores, entonces el módulo está instalado correctamente en el entorno de Python. Sin embargo, si devuelve un error indicando que el módulo no se encuentra, entonces el problema probablemente se debe a que el entorno de Python no tiene los paquetes requeridos instalados.

    En este caso, una solución podría ser instalar el paquete mysql-connector utilizando pip3 desde la línea de comandos:

    pip3 install mysql-connector
    

    Esto instalará el paquete en el entorno de Python y lo hará disponible para el script incluso cuando se ejecute desde Openresty/Lua.

    Alternativamente, también podrías intentar agregar la ruta al módulo mysql.connector a la variable ‘sys.path’ de Python en el script, de la siguiente manera:

    import sys
    sys.path.append('/ruta/al/módulo/mysql/connector')
    import mysql.connector
    

    Reemplaza ‘/ruta/al/módulo/mysql/connector’ con la ruta real al módulo en tu sistema. Esto asegurará que el módulo sea encontrado por el script incluso si no está instalado en el entorno de Python del sistema.

    Siguiendo estos pasos, deberías poder asegurar que el script se ejecute correctamente incluso cuando se requieran módulos importados como mysql.connector.

Comments are closed.