python - professional - ¿Hay "Editar y Continuar" en PyCharm? ¿Recargar código en el programa en ejecución como en Eclipse/PyDev?
pycharm tutorial (3)
Hola a todos los desarrolladores de Python!
En Eclipse con PyDev, es posible editar un archivo Python durante la depuración. Al guardar, el depurador de PyDev volverá a cargar el código actualizado en el programa en ejecución y usará mi nuevo código. ¿Cómo puedo hacer lo mismo en JetBrains PyCharm (usando Community Edition)?
Eclipse / PyDev escribe un resultado como este cuando hago eso:
pydev debugger: Start reloading module: "MyWidget" ...
pydev debugger: Updated function code: <function close at 0x055F4E70>
pydev debugger: reload finished
Busqué configuración y web y no pude encontrar ninguna pista. Muy contento con cualquier idea. Gracias.
Editar: Descubrí en Eclipse / PyDev que uno tiene que estar en modo de depuración para poder usar esta característica. Probé en PyCharm, pero no se realizó ninguna recarga.
Después de todo, encontré una solución útil y aceptable para mi pregunta. Funciona en PyCharm Community Edition 3.1.2 y supongo que también lo hará en una edición comercial. Probé en un proyecto de mediana escala usando Python 2.7.6, PySide (Qt) con una ventana principal y más de 20 widgets, pestañas, lo que sea. Sigue estos pasos...
- Trabaja en Pycharm en un proyecto de python :-)
- Ejecute su código en modo Depuración (no se ha probado la versión hasta el momento)
- Edite un código en uno de sus módulos importados durante la vida de su programa
- Haz que tu programa se detenga . Para lograr esto, puede hacer clic en el botón "Pausa" de la vista de depuración de PyCharms y luego en cualquier lugar de la ventana principal de su aplicación donde necesite hacer algo (por ejemplo, en un encabezado de pestaña). Si tiene una tarea larga en ejecución y sin interfaz de usuario, puede colocar un punto de interrupción en un lugar donde su programa suele aparecer.
- En la vista de depuración, cambie a la pestaña Consola . Hay un botón a la izquierda. Mostrar línea de comando . Haga clic en esto
- En la consola, ingrese reload (MyModifiedModule) si esta llamada falla, escriba import MyModifiedModule y vuelva a intentarlo.
- Haga clic en currículum en PyCharm.
- Prueba el código que arreglaste
Existen algunas restricciones sobre esto ... No arreglará los cambios en su método principal o ventana principal, porque no se creará de nuevo. En mis pruebas no pude volver a cargar widgets de Qt. Pero funcionó para clases como contenedores de datos o trabajadores.
Que la fuerza te acompañe mientras intentas esto y no dudes en agregar tus experiencias.
Gracias.
PyCharm no es compatible con editar y continuar en la edición de la comunidad o en la edición profesional, pero he aquí una solución que encontré durante la depuración.
Dado que puede ejecutar código arbitrario en la consola y / o el evaluador de expresiones, en muchos casos, puede ejecutar cambios en el código sin tener que reiniciar la aplicación. Esto no es exactamente como edit-and-continue (que es una característica que me gusta mucho en Visual Studio y debería ser parte de Pycharm), pero va un largo camino para evitar tener que reiniciar el programa desde cero después de un cambio para ver si el nuevo código funciona como se esperaba
Permítanme ilustrar algunas de las técnicas que uso:
Digamos que tienes el siguiente código (con un par de errores tipográficos / para ilustrar las técnicas)
test_value = [10,9,8,7,6,55,4,3,2,1]
for i in range(0,10):
if test_value[i] == i:
print "found the value: " + i
Si ejecuta este código, primero comete un error porque no puede imprimir la cadena más el número entero, pero también quería que coincida con 5, no con 55 en la matriz. Así que, aquí vamos.
Establezca un punto de interrupción en la instrucción for como esta y ejecute el código en el depurador.
Cuando se rompe en el depurador, te das cuenta de que debe ser 5 no 55. En lugar de reiniciar, puedes cambiar la línea 1 a test_value = [10,9,8,7,6,5,4,3,2,1] luego seleccione la línea, haga clic derecho y elija Ejecutar línea en la consola ... lo que cambiará el valor de test_value para que sea la matriz con un 5. Ahora, la instrucción if en la línea 4 se convierte en verdadera en el valor 5. Esto disparará el error de sintaxis en la línea 5.
Ahora, si quiere asegurarse de tener la sintaxis correcta, puede cambiar la línea 5 para imprimir "found the value:" + str (i) , seleccionar la línea y elegir Evaluar Expresión ... desde el menú contextual del botón derecho. Al hacer clic en Evaluar, el resultado aparecerá en el cuadro de diálogo (o en este caso, dado que es un comando de impresión, en la consola)
Ahora que he solucionado estos dos problemas, puedo ejecutar el código con éxito en el segundo pase en lugar de posiblemente pases múltiples que podría haber realizado si no hubiera utilizado estas técnicas. Estas técnicas realmente dan sus frutos si encuentras un error en el código que tardó un tiempo en configurarse.
Obviamente, este es un ejemplo muy artificial, pero con suerte esto muestra cómo puede usar tanto Evaluar Expresión ... como Ejecutar Línea en la Consola ... para su beneficio mientras depura sin tener que reiniciar su aplicación cada vez que encuentra un error en el código.
Además, si está utilizando Django, PyCharm (profesional) volverá a ejecutar el servidor si realiza cambios en el código. Entonces, si está mirando su página web y nota un problema, puede hacer un cambio en el código y volver a la página web y, a medida que lo hace, la aplicación en ejecución o la aplicación depurada se relanzarán y el nuevo código se ejecutará cuando actualice la página. Nuevamente, realmente no edito y continúo, pero es una forma bastante rápida de hacer un cambio y probar.
Tengo la versión comercial de PyCharm y acabo de probar un script de Python simple. El script es el siguiente:
for i in range(0,100):
print i
Ejecuté el código en modo de depuración y coloqué un punto de interrupción en la declaración "imprimir i". Cuando el depurador se detuvo durante la primera iteración, cambié el código para que se vea así:
for i in range(0,100):
print i
print ''hello''
PyCharm no volvió a cargar / volver a compilar el script alterado. Dada esta simple prueba, mi mejor estimación sería que PyCharm no recarga dinámicamente archivos .py.