2012-08-25 22 views
12

Tôi mới lập trình và cố gắng làm việc qua hướng dẫn bình. http://flask.pocoo.org/docs/tutorial/hướng dẫn flaskr; không thể nhập khẩu flaskr (khởi tạo cơ sở dữ liệu)

tôi bị mắc kẹt trên một phần này (từ readme trên github) khi cố gắng chạy ứng dụng: https://github.com/mitsuhiko/flask/tree/master/examples/flaskr/

cháy lên một vỏ python và chạy này:

from flaskr import init_db; init_db() 

tôi nhận được lỗi này khi tôi cố gắng chạy lệnh trong shell python:

Import error: No module named flaskr 

Và tôi gặp lỗi này khi tôi cố gắng chạy ứng dụng cục bộ:

sqlite3.OperationalError 
OperationalError: unable to open database file 

Tôi đã tìm kiếm giải pháp trong vài giờ, nhưng vô ích. Bất kỳ suy nghĩ nào về những gì tôi có thể kiểm tra? Cảm ơn bạn.

Trả lời

5

Cách đơn giản nhất để thực hiện những gì bạn cần là để cháy lên vỏ Python trong thư mục giống như bạn có 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() 

Bí quyết là khi bạn chạy Python nó chỉ trông vào một số lượng nhất định địa điểm cho modules and packages - bạn có thể xem những địa điểm nào bằng cách chạy:

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

từ trình thông dịch Python. Nếu đường dẫn đến bình không nằm trong danh sách đó thì không thể nhập khẩu. Theo mặc định, Python thêm thư mục được bắt đầu vào đường dẫn tìm kiếm của nó (đó là lý do tại sao chúng ta bắt đầu Python trong thư mục có chứa flaskr.)

Khi bạn đã chạy init_db bạn sẽ có thể chạy ứng dụng và xem mọi thứ hoạt động .

+0

Rất tiếc, cảm ơn bạn đã quay vòng nhanh! Đó là một lời giải thích rất hữu ích, và tôi đã có thể cài đặt và chạy ứng dụng. Cảm ơn một lần nữa. –

+0

@JamieB - vui vì tôi có thể giúp! Hãy tận hưởng hướng dẫn. –

+0

Khi tôi thực hiện việc nhập thông qua trình thông dịch Python, tôi nhận được 'RuntimeError: Làm việc bên ngoài ngữ cảnh ứng dụng.' – caspii

2

Để bất kỳ ai khác tìm thấy này, thêm init_db() đến executer chính đến hết ứng dụng flaksr của bạn như sau:

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

Điều đó sẽ giải quyết các lỗi sqlite và ngăn chặn bạn khỏi phải chạy init_db() bằng tay.

0

Câu trả lời của Sean Viera rất tốt, mặc dù tôi muốn thêm rằng tôi đã gặp phải vấn đề tương tự và muốn thêm vào giải pháp. Chạy Python từ cùng một thư mục flaskr là không đủ cho tôi. Nó cũng là cần thiết để kích hoạt Flask trước khi chạy $ Python bằng cách chạy lệnh, như vậy "venv/bin/kích hoạt.":

$ 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() 
$ 

Hy vọng rằng sẽ thêm chút thông tin giúp!

4

Nếu bạn đang sử dụng phiên bản Flask < 0.11, lệnh flask không khả dụng. Cài đặt gói flask-cli trong trường hợp đó.

pip install flask-cli 
24

Điều mà cố định nó đối với tôi là thay đổi

export FLASK_APP=flaskr 

để

export FLASK_APP=flaskr.py 

Taken từ here

2

Khi chúng ta nói:

export FLASK_APP=flaskr 

không có nghĩa là python hiểu nơi gói "flaskr.py" tồn tại.

Một trong những cách để giải quyết vấn đề là chọn đúng đường dẫn nơi "flaskr.py" cư trú. Ví dụ: thay đổi thư mục làm việc hiện tại của bạn thành nơi tệp tồn tại và:

export PYTHONPATH=`pwd` 

Sau đó, bạn có thể thực hiện "chạy bình" bất cứ nơi nào bạn muốn.

PS: hướng dẫn bình dường như bị hỏng. :)

0
$set FLASK_APP=flaskr 
$python -m flask initdb 
$python -m flask run 
Các vấn đề liên quan