2012-08-25 67 views
12

我是新手編程,並試圖通過燒瓶教程工作。 http://flask.pocoo.org/docs/tutorial/flaskr教程;無法導入燒瓶(初始化數據庫)

我卡在這個部分(從GitHub上的自述)試圖運行應用程序時: https://github.com/mitsuhiko/flask/tree/master/examples/flaskr/

火了一個Python shell並運行此:

from flaskr import init_db; init_db() 

我當我嘗試在python shell中運行該命令時出現此錯誤:

Import error: No module named flaskr 

而且當我遇到此錯誤時嘗試在本地運行應用程序:

sqlite3.OperationalError 
OperationalError: unable to open database file 

我一直在尋找解決方案几個小時了,但無濟於事。 關於我可以檢查什麼的任何想法?謝謝。

回答

5

來完成你所需要的最簡單的方法是火起來了Python殼在同一文件夾,你有flaskr:

# I'm assuming that python is available on the command line 
$ cd path/to/flaskr 
$ python 

# Python then runs and you can import flaskr 
>>> from flaskr import init_db; init_db() 
>>> exit() 

訣竅是,當你運行Python它只是看起來一定數量從Python解釋器

>>> from sys import path 
>>> for fp in path: 
...  print fp 

: - 爲modules and packages地方,你可以看到運行的地方。如果燒瓶的路徑不在該列表中,則不能導入燒瓶。默認情況下,Python將它所啓動的目錄添加到它的搜索路徑中(這就是爲什麼我們在包含flaskr的目錄中啓動Python的原因。)

一旦運行了init_db,您應該可以運行應用程序並查看所有工作。

+0

哇,謝謝你的快速週轉!這是一個非常有用的解釋,我能夠啓動並運行該應用。再次感謝。 –

+0

@JamieB - 很高興能幫到你!享受教程。 –

+0

當我通過Python解釋器進行導入時,我得到'RuntimeError:在應用程序上下文之外工作。' – caspii

2

爲了別人誰發現這一點,添加init_db()的主要執行者,以您的flaksr應用的結束如下:

if __name__ == '__main__': 
    init_db() 
    app.run() 

這應該解決的sqlite的錯誤,無需手動運行init_db()阻止你。

0

Sean Viera的回答非常好,雖然我想補充一點,我遇到了同樣的問題並希望添加到解決方案中。從同一個flaskr文件夾運行Python對我來說還不夠。此外,還必須通過運行運行$ Python的前激活瓶的命令,像這樣「VENV /斌/激活」:

$ cd path/to/flaskr 
#active 
$ . venv/bin/activate 
(venv)$ python 

# Python then runs and you can import flaskr 
>>> from flaskr import init_db; 
>>> init_db() 
>>> exit() 
$ 

希望這些信息的額外位幫助!

4

如果您使用的是Flask < 0.11版本,則flask命令不可用。在這種情況下安裝flask-cli包。

pip install flask-cli 
24

是固定的,對我來說,事情正在發生變化

export FLASK_APP=flaskr 

export FLASK_APP=flaskr.py 

here

2

兩者當我們說:

export FLASK_APP=flaskr 

絕不意味着python能夠理解包「flaskr.py」的存在位置。

解決此問題的方法之一是選擇「flaskr.py」所在的正確路徑。對於例如,改變當前工作目錄到文件存在:

export PYTHONPATH=`pwd` 

則可以執行「燒瓶運行」任何你想要的。

PS:燒瓶教程似乎破了。 :)

0
$set FLASK_APP=flaskr 
$python -m flask initdb 
$python -m flask run