2017-01-24 3 views
0

Ich möchte kleine Flasche Server innerhalb Jupyter Notebook zur Demo debuggen.debug Flask Server in Jupyter Notebook

Ich erstellte virtualenv auf neuesten Ubuntu und Python2 (auf Mac mit Python3 tritt dieser Fehler auch auf), pip install flask jupyter.

Wenn ich jedoch eine Zelle mit Helloworld-Skript erstellen, wird es nicht im Notizbuch ausgeführt.

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

if __name__ == "__main__": 
    app.run(debug=True,port=1234) 

File "/home/***/test/local/lib/python2.7/site-packages/ipykernel/kernelapp.py", line 177, in _bind_socket s.bind("tcp://%s:%i" % (self.ip, port)) File "zmq/backend/cython/socket.pyx", line 495, in zmq.backend.cython.socket.Socket.bind (zmq/backend/cython/socket.c:5653) File "zmq/backend/cython/checkrc.pxd", line 25, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:10014) raise ZMQError(errno) ZMQError: Address already in use

NB - ich ändern die Portnummer nach jeder Zeit ausfällt.

Sicher, es läuft als eigenständiges Skript.

Update ohne (debug = True) es ist in Ordnung.

+0

Ich kann dein Problem nicht reproduzieren. Wenn Sie diesen genauen Code in einer Jupyter-Zelle ausführen, wird der Dev-Server wie erwartet ausgeführt. Bitte [bearbeiten], um ein [mcve] einzuschließen. – davidism

+0

@davidism könnte es sein, dass Port mehrere Male in Jupyter geöffnet ist, auch wenn es einmal ausgeführt wird? – chro

+0

habe ich etwas vermisst außer mkdir test; CD-Test; virtualenv. ; Quell-Bin/aktivieren; Pip installieren Flasche Jupiter? Ich dachte, dass es offensichtlich ist – chro

Antwort

-2

Das flask.Flask Objekt ist eine WSGI Anwendung kein Server. Wenn der Speicher flask Anwendungen werkzeug als WSGI Server dient so als rufen Sie

python -m flask run 

in der Shell, erstellt es einen neuen WSGI Server und übergibt dann Ihre flask.Flask als paremeter zu from werkzeug.serving.run_simple. Vielleicht sagtest du folgendes:

from werkzeug.wrappers import Request, Response 
from flask import Flask 

app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

if __name__ == '__main__': 
    from werkzeug.serving import run_simple 
    run_simple('localhost', 9000, app) 
+1

Dies ist absolut nicht anders als Aufruf 'app.run()', abgesehen von ein paar Konfigurationsüberprüfungen. – davidism

+0

wow, das hilft! run_simple funktioniert – chro

+0

Trotzdem @davidism ist richtig, ich habe gerade 'jupyter' und' Flask' ​​installiert und dein originaler Code funktioniert wie ein Zauber. Stellt sich heraus, dass 'flask.Flask # run' einen Aufruf an' run_simple' hat. – yorodm