2017-01-24 33 views
0

我想調試Jupyter筆記本內的小瓶服務器進行演示。Jupyter筆記本內的調試瓶服務器

我在最新的Ubuntu和Python2上創建了virtualenv(在使用Python3的Mac上也出現此錯誤),pip install flask jupyter。

但是,當我用helloworld腳本創建一個單元格時,它不會在筆記本內運行。

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 - 我改變每個失敗的時間後的端口號。

當然,它作爲一個獨立的腳本運行。

update without(debug = True)沒關係。

+0

我不能重現你的問題。在Jupyter單元中運行此確切代碼可按預期運行開發服務器。請[edit]包含[mcve]。 – davidism

+0

@davidism是否可以在Jupyter中打開端口幾次,即使運行一次? – chro

+0

我錯過了除mkdir測試之外的東西;光盤測試; virtualenv。 ;源bin /激活;點安裝燒瓶jupyter?我認爲這很明顯 – chro

回答

-2

flask.Flask對象是WSGI應用程序而不是服務器。如果沒記錯的flask用途werkzeugWSGI服務器,因此,當你調用

python -m flask run 

在你的shell,它會創建一個新的WSGI服務器,然後通過你的flask.Flask爲paremeter到from werkzeug.serving.run_simple。這beeing說,也許你可以試試這個:

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

這與調用'app.run()'完全沒有什麼不同,除了一些配置檢查。 – davidism

+0

哇,這有幫助! run_simple正在工作 – chro

+0

儘管@davidism是正確的,我剛剛安裝了'jupyter'和'Flask',你的原代碼就像一個魅力。原來'flask.Flask#run'有一個'run_simple'調用。 – yorodm