python - library - La carga automática de pycharm y frasco y los puntos de interrupción no funcionan
packages pycharm (6)
Estoy usando Pycharm 4, con matraz 0.10.1, python 3.4
Parece que al ejecutar una aplicación de matraz desde dentro de pycharm, si lo ejecuto con:
app.run(debug=True)
Mis puntos de interrupción son ignorados. Después de buscar en Google, he encontrado que para hacer que PyCharm se detenga en los puntos de interrupción, debería ejecutar el matraz con:
app.run(debug=True, use_reloader=False)
Ahora PyCharm se detiene correctamente en los puntos de interrupción, pero echo de menos la función de carga automática.
¿Hay alguna manera de hacer que ambos trabajen juntos?
Usando Python 2.7 ambas cosas funcionan
Informé a PyCharm: https://youtrack.jetbrains.com/issue/PY-13976
de pycharm 2017 usando python 2.7 (en mi caso con env virtual, pero supongo que no es necesario) lo hago:
- correr...
- deje los scripts y los parámetros de los scripts en blanco
- Puse en opciones de intérprete: -m frasco correr
establecer las variables env FLASK_APP
que ejecutar adjuntar al proceso local, y finalmente elegir el proceso en ejecución
Mi caso de uso es conectar los puntos finales de los servicios de descanso del cartero al matraz e interrumpir mis puntos de interrupción.
El problema se debe a que, con use_reloader=True
la aplicación werkzeug se inicia en un subproceso separado (hijo) de la aplicación principal y PyCharm no puede manejar correctamente los puntos de interrupción porque se pierden cuando se inicia el subproceso.
Puede intentar seguir este hilo: http://forum.jetbrains.com/thread/PyCharm-776 pero parece que no hubo demasiado progreso en eso.
Sugeriría usar algo Python-ish como pdb
, es decir:
@app.route(''/<string:page>'')
def main(page):
import pdb; pdb.set_trace() # This line actually stops application execution
# and starts Python debug shell in the console
# where you can examine current scope and continue
# normal code execution at any time.
# You can inject *any* code here.
# For example, if you type `print page` during pause,
# it will output content of "page" variable.
return render_template(''index.html'')
Voy a comenzar con la respuesta corta: No, lo que desea no se puede hacer con ninguna versión de PyCharm hasta 4.0.1.
El problema es que cuando utiliza el cargador de recarga, la aplicación Flask se ejecuta en un proceso secundario, por lo que el depurador de PyCharm se adjunta al proceso maestro y no tiene control sobre el niño.
La mejor manera de resolver este problema, en mi opinión, es pedirle a Jetbrains que construya una función de "reinicio al cambiar" en su IDE. Entonces no necesita utilizar el recargador de Werkzeug y obtiene la misma funcionalidad directamente de PyCharm.
Hasta que Jetbrains decida implementar esto, puedo compartir mi solución, que no es terriblemente mala.
- En "Editar configuraciones", establezca la configuración que va a utilizar en "Solo instancia única" (casilla de verificación en la parte superior derecha del cuadro de diálogo)
- Asegúrese de que la configuración es la activa.
- Configure su aplicación Flask para que no use el recargador Werkzeug.
- Presione Ctrl-D para iniciar la depuración (en Mac, otros pueden tener un acceso directo diferente)
- Los puntos de interrupción deberían funcionar bien porque el recargador no está activo.
- Realiza los cambios de código que necesites.
- Cuando esté listo para reiniciar, presione Ctrl-D nuevamente. La primera vez que lo haga, recibirá un mensaje de confirmación, algo así como "¿detener y reiniciar?". Diga sí y marque la casilla de verificación "No volver a mostrar".
- Ahora puede presionar Ctrl-D para reiniciar rápidamente el depurador cuando lo necesite.
Estoy de acuerdo en que no es perfecto, pero una vez que el Ctrl-D entre en tu memoria muscular, ni siquiera lo pensarás.
¡Buena suerte!