• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Estadística
      • Calculadora del Tamaño Muestral en Encuestas
      • Calculadora de estadísticos descriptivos
      • Test de normalidad
      • Calculadora de contrastes de hipotesis
      • Calculadora de tamano del efecto
      • Simulador de Regresión Lineal con Ruido
      • Visualizador de PCA
      • Visualizador de Series Temporales
      • Simulador de Regresión Logística
      • Simulador de K-Means
      • Simulador de DBSCAN
      • Detector de la Ley de Benford
    • Probabilidad
      • Calculadora de Probabilidad de Distribuciones
      • Calculadora de Probabilidades de Lotería
      • Simulador del Problema de Monty Hall
      • Simulador de la Estrategia Martingala
    • Finanzas
      • Calculadora de Préstamos e Hipotecas
      • Conversor TIN ↔ TAE
      • Calculadora DCA con ajuste por inflación
      • Calculadora XIRR con Flujos Irregulares
      • Simulador FIRE (Financial Independence, Retire Early)
    • Negocios
      • CLV
      • Scoring
    • Herramientas
      • Formateador / Minificador de JSON
      • Conversor CSV ↔ JSON
      • Comparador y Formateador de Texto y JSON
      • Formateador y Tester de Expresiones Regulares
      • Inspector de JWT
      • Generador y verificador de hashes
      • Codificador / Decodificador Base64 y URL
      • Conversor de bases numericas
      • Conversor de Timestamp Unix
      • Conversor de colores
      • Generador de UUIDs
    • Juegos
      • Tres en Raya
      • Nim con Q-Learning
    • Más
      • Método D’Hondt
      • Generador de Contraseñas Seguras
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • R
  • Excel

Cómo ejecutar JavaScript desde Python: Guía práctica con js2py

octubre 30, 2025 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 9 minutos

Aunque Python y JavaScript son lenguajes muy distintos en su propósito y ecosistema, no es raro encontrarnos en situaciones en las que necesitamos integrar ambos. Tal vez queremos reutilizar una función compleja escrita en JavaScript, o simplemente acceder a una librería que no existe (o no está tan madura) en el ecosistema Python. En esos casos, poder ejecutar código JavaScript desde Python se vuelve una opción más que interesante.

Por ejemplo, algunas situaciones comunes en las que esto puede ser útil son:

  • Aplicaciones que combinan frontend en JS con backend en Python.
  • Reutilización de lógica de negocio o validación ya implementada en JS.
  • Acceso a funciones de bibliotecas JS que no tienen equivalente en Python.
  • Automatización de pruebas que requieren analizar scripts JS.

A lo largo de esta guía veremos cómo ejecutar código JavaScript (y también TypeScript) desde Python, usando principalmente la herramienta js2py, aunque también mencionaremos otras opciones. Veremos casos básicos y avanzados, así como buenas prácticas para que tu integración sea mantenible y eficiente.

Tabla de contenidos

  • 1 Opciones disponibles para ejecutar JavaScript desde Python
    • 1.1 js2py – Intérprete puro en Python
    • 1.2 PyMiniRacer – Motor V8
    • 1.3 subprocess + node – Ejecutar JS usando Node.js
    • 1.4 PyExecJS – Ejecutar código JS con múltiples motores
    • 1.5 ¿Cuál elegir?
  • 2 Instalación de js2py y primer ejemplo básico
  • 3 Tu primer script JavaScript en Python
    • 3.1 Notas importantes
  • 4 Ejecutar código JavaScript desde un archivo .js
    • 4.1 Crear el archivo
    • 4.2 Cargar y ejecutar desde Python
    • 4.3 Consideraciones al usar archivos .js
  • 5 ¿Y qué hay del TypeScript?
    • 5.1 Instalar TypeScript (si no lo tienes)
    • 5.2 Crear un archivo logica.ts
    • 5.3 Transpilar a JavaScript
    • 5.4 Ejecutar desde Python
  • 6 Buenas prácticas al ejecutar JavaScript desde Python
    • 6.1 Separa el código JavaScript del código Python
    • 6.2 Evita depender de características modernas de JS
    • 6.3 Controla los errores con bloques try/except
    • 6.4 Conviértelo a estructuras nativas cuando sea posible
    • 6.5 Documenta bien la interfaz entre JS y Python
    • 6.6 Automatiza la conversión desde TypeScript o Babel
  • 7 Conclusiones
    • 7.1 Cuándo sí puede tener sentido:
    • 7.2 Cuándo no es una buena idea:
    • 7.3 Recomendación general
  • 8 Apéndice: Crear un entorno virtual para usar js2py con Python 3.10
    • 8.1 ¿Por qué usar un entorno virtual?
    • 8.2 Opción 1: Usar venv con Python 3.10
    • 8.3 Opción 2: Usar conda (más fácil si usas Anaconda/Miniconda)

Opciones disponibles para ejecutar JavaScript desde Python

Actualmente existen varias opciones para ejecutar JavaScript desde Python. Algunas se apoyan en motores JavaScript integrados como el de Node.js o V8, y otras implementan su propio intérprete. En esta sección, te presentamos las principales alternativas, con sus ventajas y limitaciones.

js2py – Intérprete puro en Python

js2py es una biblioteca que traduce código JavaScript a Python (en tiempo de ejecución), permitiendo su ejecución directa sin depender de un motor externo como Node.js.

Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
En Analytics Lane
Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane

Ventajas:

  • Se instala con pip, sin dependencias externas.
  • No requiere tener Node.js instalado.
  • Puedes ejecutar código JavaScript desde cadenas de texto o archivos .js.
  • Permite acceder y modificar variables JavaScript desde Python.

Limitaciones:

  • Soporte parcial de ECMAScript (hasta ES5.1; no soporta ES6+).
  • No es adecuado para librerías modernas basadas en módulos o DOM.
  • No soporta librerías que dependen de window, document, fetch, etc.
  • No compatible con Python 3.12 (ni completamente con 3.11)

js2py es la solución ideal para la integración de funciones puramente lógicas o matemáticas.

Publicidad


PyMiniRacer – Motor V8

PyMiniRacer incluye el motor V8 de Google, permitiendo ejecutar código JavaScript moderno con alto rendimiento.

Ventajas:

  • Soporte para ECMAScript moderno.
  • Muy rápido gracias a V8.
  • No necesita Node.js.

Limitaciones:

  • No se puede acceder fácilmente a variables entre contextos.
  • Menos flexible que js2py en cuanto a integración con objetos Python.
  • Instalación más compleja (requiere compilación o binarios compatibles).

**PyMiniRacer ** es la opción más adecuada si necesitas ejecutar JavaScript moderno pero sin depender del entorno web.

subprocess + node – Ejecutar JS usando Node.js

Si ya tienes Node.js instalado, puedes ejecutar cualquier archivo JS usando subprocess desde Python.

import subprocess

result = subprocess.run(['node', 'script.js'], capture_output=True, text=True)

print(result.stdout)

Ventajas:

  • Soporte completo para JavaScript moderno (ES6+).
  • Permite usar cualquier librería disponible en npm.
  • Puedes trabajar con TypeScript transpilado previamente.

Limitaciones:

  • Comunicación limitada (entrada/salida estándar).
  • Necesita Node.js instalado.
  • El intercambio de datos es más manual (JSON, stdin/stdout).

El uso de subprocess y node es la opción más flexible, pero también la más “manual” de todas.

PyExecJS – Ejecutar código JS con múltiples motores

PyExecJS permite ejecutar código JS usando distintos motores de JavaScript: Node.js, JScript, PhantomJS, etc.

Ventajas:

  • Interfaz unificada para distintos motores.
  • Simple de usar si ya tienes Node.js instalado.

Limitaciones:

  • Requiere motor externo (por ejemplo, Node.js).
  • Limitado en cuanto a integración de datos complejos entre Python y JS.

PyExecJS es similar a subprocess y node, pero con menos requiere de menos configuraciones “manuales”.

Publicidad


¿Cuál elegir?

En la siguiente tabla se muestra una comparativa entes estas cuatro opciones que se han visto para ejecutar JavaScript desde Python.

OpciónFácil de usarSoporte ES6+IntegraciónRequiere Node
js2py✅ Muy fácil❌ No✅ Alta❌ No
PyMiniRacer⚠ Media✅ Sí⚠ Limitada❌ No
subprocess✅ Fácil✅ Total⚠ Manual✅ Sí
PyExecJS✅ Fácil✅ Parcial⚠ Limitada✅ Sí

En esta entrada, nos centraremos en js2py porque es la opción más accesible para comenzar, ideal para scripts pequeños, funciones simples y prototipos.

Instalación de js2py y primer ejemplo básico

La mayor ventaja de js2py es que no necesita tener Node.js ni ningún motor JavaScript instalado. Solo necesitas tener Python 3.6 o superior.

Puedes instalar js2py directamente desde PyPI con:

pip install js2py

Tu primer script JavaScript en Python

Vamos a comenzar con algo sencillo: ejecutar una función JavaScript que suma dos números. Por ejemplo, la siguiente función:

function suma(a, b) {
    return a + b;
}

Para ejecutar esta función de suma, solamente se tiene que importar js2py, crear una variable de Python con la función, crear un contexto de js2py, inyectar la función en este contexto y llamar a la función desde Python con los parámetros para que se ejecute. Lo que se puede ver en el siguiente código:

import js2py

# Código JavaScript como string
codigo_js = """
function suma(a, b) {
    return a + b;
}
"""

# Ejecutamos el código JS y creamos un contexto
contexto = js2py.EvalJs()
contexto.execute(codigo_js)

# Ahora podemos usar la función suma como si fuera una función Python
resultado = contexto.suma(5, 7)
print(f"Resultado: {resultado}")  

Publicidad


Notas importantes

Respecto al uso de js2py para ejecutar código JavaScript es importante notar los siguientes puntos:

  • El contexto es como una “caja de arena” (sandboxing) de JavaScript embebida en Python. Todo el código JavaScript vive ahí dentro.
  • Los valores simples (int, float, str) se convierten automáticamente entre Python y JS. Los objetos complejos pueden necesitar conversión manual.
  • Si hay errores de sintaxis en el JS, js2py lanzará una excepción de tipo JsException.

Ejecutar código JavaScript desde un archivo .js

En vez de escribir el código JavaScript como un string dentro de Python, también puedes cargarlo desde un archivo externo. Facilitando la reutlización del código ya existente. Ademas esto mantiene tu código más limpio y organizado.

Crear el archivo

A modo de ejemplo, vamos a generar un llamado utilidades.js con el código JavaScript que se dese ejecutar:

function cuadrado(x) {
    return x * x;
}

function saludar(nombre) {
    return "Hola, " + nombre + "!";
}

Publicidad


Cargar y ejecutar desde Python

Una vez creado al archivo, solo hay que importar el archivo en una variable y repetir el procesos visto anteriormente: crear el contexto, inyectar el código y llamar a las funciones desde Python. Una forma de hacer esto seria como se muestra en el siguiente ejemplo:

import js2py

# Leer el contenido del archivo .js
with open('utilidades.js', 'r', encoding='utf-8') as f:
    codigo_js = f.read()

# Crear un contexto JS y ejecutar el código
contexto = js2py.EvalJs()
contexto.execute(codigo_js)

# Llamar funciones definidas en el JS
print(contexto.cuadrado(9))
print(contexto.saludar("Lucía"))

Consideraciones al usar archivos .js

El código JavaScript no tiene porque estar en un único archivo, lo que mejora la mantenibilidad y escalabidliad de esta solución. En estos casos es importante tener en cuenta los siguiente puntos:

  • Puedes dividir tu lógica JS en varios archivos y combinarlos en Python.
  • Ten cuidado con funciones duplicadas o conflictos de nombres si cargas varios archivos.
  • Si tu código JS depende de módulos (con import o require), js2py no los soporta, porque no tiene un sistema de módulos como Node.js.

¿Y qué hay del TypeScript?

Debido a que js2py no entiende TypeScript directamente, pero sí puedes usar TypeScript si lo transpilas primero a JavaScript. A continuación, te mostramos cómo hacerlo.

Publicidad


Instalar TypeScript (si no lo tienes)

Para esto es necesario tener tener Node.js y TypeScript instalado como dependencia global. Si no lo tienens puedes usar la siguiente linea para instarlo:

npm install -g typescript

Crear un archivo logica.ts

Ahora, solamente hay que disponer de un archivo con una o varias funciones escritas en TypeScript. Por ejemplo, el siguiente archivo con la función doble:

export function doble(x: number): number {
    return x * 2;
}

Transpilar a JavaScript

Es importante recordar que js2py no soporta export ni el sistema de módulos de ES6, así que deberás transpilar y adaptar el resultado. Esto es, compilar para ES5 como se muestra a continuación:

tsc logica.ts --target ES5 --module none

Esto generará un archivo logica.js con código JavaScript similar al que se muestra a continuacion:

function doble(x) {
    return x * 2;
}

Publicidad


Ejecutar desde Python

Ahora, que se tiene un archivo JavaScript con el código traspalado, simplemente se debe ejecutar como se ha hecho en las secciones anteriores.

import js2py

with open('logica.js', 'r', encoding='utf-8') as f:
    codigo_js = f.read()

contexto = js2py.EvalJs()
contexto.execute(codigo_js)

print(contexto.doble(21))  # 42

Buenas prácticas al ejecutar JavaScript desde Python

Aunque js2py permite una integración muy directa, es importante mantener cierto orden y estructura para evitar errores difíciles de depurar, especialmente si el proyecto crece. Aquí te comparto una serie de buenas prácticas a la hora de usar esta libreria:

Separa el código JavaScript del código Python

Evita incrustar cadenas JS largas dentro de tu código Python. En su lugar:

  • Coloca el JavaScript en archivos .js separados.
  • Usa with open() para cargarlos.
  • Esto mejora la legibilidad y facilita el mantenimiento.
with open("mi_script.js") as f:
    js_code = f.read()

Publicidad


Evita depender de características modernas de JS

js2py solo es compatible con ECMAScript 5.1. Por tanto, evita:

  • import / export
  • class, let, const
  • Promise, async/await
  • Arrow functions (() => {})

No es necesario hacer esto de manera manual, puedes convertir tu código a ES5 con herramientas como Babel o el compilador de TypeScript (tsc).

Controla los errores con bloques try/except

Si el código JavaScript falla, js2py lanza una excepción JsException:

import js2py

try:
    ctx = js2py.EvalJs()
    ctx.execute("function error() { throw '¡error!'; } error();")
except js2py.internals.simplex.JsException as e:
    print("Se produjo un error en JavaScript:", e)

Conviértelo a estructuras nativas cuando sea posible

Esto facilita trabajar con los datos y evita errores sutiles:

resultado = ctx.getDatos()         # Objeto JavaScript
datos = resultado.to_dict()        # Diccionario Python

Publicidad


Documenta bien la interfaz entre JS y Python

Cuando tu código JavaScript implemente funciones que serán usadas desde Python, asegúrate de:

  • Documentar claramente sus nombres, parámetros y tipos esperados.
  • Evitar nombres genéricos como run, calc, doStuff.

Esto previene errores si otro desarrollador (o tú mismo en el futuro) retoma el código.

Automatiza la conversión desde TypeScript o Babel

Si usas TypeScript o ES6, puedes usar tsc o babel para convertir automáticamente el código a ES5 compatible. Ejemplo con TypeScript:

tsc archivo.ts --target ES5 --module none --outDir js_build

Luego desde Python:

with open("js_build/archivo.js") as f:
    js_code = f.read()

Conclusiones

Ejecutar código JavaScript desde Python es una recuso que ofrece múltiples posibilidades, pero debe usarse con cabeza. No es una solución mágica, sino una herramienta extremadamente útil para casos concretos.

Publicidad


Cuándo sí puede tener sentido:

  • Ya tienes lógica implementada en JavaScript o TypeScript y quieres aprovecharla desde un entorno Python sin reescribirla.
  • El código JavaScript es simple, sin dependencias modernas (ES5 puro), como funciones utilitarias o algoritmos específicos.
  • Necesitas compartir lógica entre backend y frontend, por ejemplo, validaciones de formularios o cálculos comunes.
  • Quieres usar pequeñas librerías sin dependencias externas, como funciones matemáticas, generadores, transformadores, etc.
  • Usas TypeScript y puedes compilarlo a ES5, reutilizándolo también desde Python.

Cuándo no es una buena idea:

  • Si necesitas usar librerías modernas (como React, Lodash, D3, etc.) que requieren módulos, DOM o Web APIs.
  • Si el código es complejo y depende de características modernas como Promise, fetch, async/await.
  • Si la solución es más simple reimplementando la lógica directamente en Python.
  • Si no tienes control del código JavaScript (por ejemplo, lo mantiene otro equipo y cambia constantemente).

Recomendación general

Para casos sencillos y controlados, js2py es una opción liviana y efectiva que te permite aprovechar código JavaScript desde Python de forma integrada. Para casos más complejos, será necesario usar Node.js como servicio auxiliar (ejecutado desde subprocess) lo que te dará mayor flexibilidad y escalabilidad.

Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.

Publicidad


Apéndice: Crear un entorno virtual para usar js2py con Python 3.10

Dado que js2py no es compatible con Python 3.11 o 3.12, la solución más segura es crear un entorno virtual con una versión de Python soportada (por ejemplo, Python 3.10). Esto te permite instalar y usar js2py sin afectar el resto de tus proyectos o tu sistema.

¿Por qué usar un entorno virtual?

  • Aísla dependencias para evitar conflictos con otros proyectos.
  • Permite usar una versión de Python específica (por ejemplo, 3.10) solo dentro del entorno.
  • Facilita la portabilidad y reproducibilidad del entorno de desarrollo.
  • Es buena práctica en proyectos Python, especialmente si usas herramientas como pip, conda o poetry.

Opción 1: Usar venv con Python 3.10

  1. Instala Python 3.10 (si no lo tienes). Puedes usar pyenv o descargarlo desde python.org.
  2. Crea un entorno virtual:
python3.10 -m venv js2py-env
  1. Activa el entorno:
  • En Linux/macOS:
source js2py-env/bin/activate
  • En Windows (CMD):
js2py-env\Scripts\activate
  1. Instala js2py:
pip install js2py
  1. ¡Listo! Ya puedes importar y usar js2py sin errores.

Publicidad


Opción 2: Usar conda (más fácil si usas Anaconda/Miniconda)

Si trabajas con Anaconda o Miniconda, puedes crear un entorno con Python 3.10 fácilmente:

conda create -n js2py-env python=3.10
conda activate js2py-env
pip install js2py

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicaciones relacionadas

  • Nuevo test de normalidad interactivo en el laboratorio de Analytics Lane
  • Nuevo conversor de timestamp Unix en el laboratorio de Analytics Lane
  • Calculadora de Contrastes de Hipótesis: interpreta correctamente el p-valor y toma decisiones estadísticas con confianza
  • Calculadora de Tamaño del Efecto: la herramienta clave para entender cuánto importa realmente una diferencia
  • Simulador de DBSCAN: descubre cómo encontrar clusters reales (y ruido) sin fijar K
  • Conversor de Colores: convierte, compara y valida cualquier color en tiempo real
  • Analytics Lane lanza su Generador de UUIDs: identificadores únicos, seguros y listos para producción en segundos
  • 1200 publicaciones en Analytics Lane
  • Analytics Lane lanza su Conversor TIN ↔ TAE: la herramienta definitiva para entender el coste real de depósitos, préstamos e hipotecas

Publicado en: JavaScript, Python

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

mayo 14, 2026 Por Daniel Rodríguez

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

mayo 12, 2026 Por Daniel Rodríguez

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

mayo 7, 2026 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Solución al error Failed to download metadata for repo ‘AppStream’ en CentOS 8 publicado el septiembre 13, 2023 | en Herramientas
  • Hoja de cálculo para repartir los escaños en base al método D’Hont Aplicar el método D’Hondt en Excel publicado el abril 14, 2021 | en Herramientas
  • Matriz definida positiva en Excel Comprobar si una matriz es definida positiva en Excel sin macros publicado el octubre 18, 2023 | en Ciencia de datos, Herramientas
  • Identificar y eliminar duplicados en Excel publicado el marzo 13, 2019 | en Herramientas
  • Uso de múltiples ejes en Matplotlib publicado el agosto 4, 2022 | en Python

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.9 (11)

Pandas: Cambiar los tipos de datos en los DataFrames

Comentarios recientes

  • bif en JSON en bases de datos: cuándo es buena idea y cuándo no
  • bif en Cómo desinstalar Oracle Database 19c en Windows
  • M. Pilar en Cómo eliminar las noticias en Windows 11 y recuperar tu concentración
  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2026 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto