Lỗi nhập khẩu bình: Không có bình có tên mô-đun


100

Tôi đang làm theo hướng dẫn về Flask tại đây:

http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

Tôi đến điểm mà tôi thử ./run.py và tôi nhận được:

Traceback (most recent call last):
  File "./run.py", line 3, in <module>
    from app import app
  File "/Users/benjaminclayman/Desktop/microblog/app/__init__.py", line 1, in <module>
    from flask import Flask
ImportError: No module named flask

Điều này trông tương tự như:

ImportError: Không có mô-đun nào có tên bình

Nhưng các giải pháp của họ không hữu ích. Để tham khảo, tôi làm có một thư mục có tên bình mà một người dùng đề cập có thể gây ra vấn đề.


1
@MalikBrahimi Khi tôi chạy Python, sau đó nhập bình và kiểm tra phiên bản tôi đã cài đặt, nó trả về "0.10.1". Vì vậy, có vẻ như tôi đã cài đặt ...
bclayman

4
Bạn đang nói nếu bạn chạy python và sau đó import flaskbạn không có lỗi? Có thể bạn có các phiên bản của python trên máy tính của mình không?
ari

2
Bạn có thể chèn import sys; print sys.pathvào tệp đó (trước dòng xảy ra lỗi) và cũng chạy tệp đó trong lời nhắc tương tác không?
ari

1
@ari Tôi đã cố gắng làm điều đó trong môi trường ảo nhưng có thể đã làm nó rối tung lên bằng cách nào đó? và vâng, tôi đang sử dụng Python 3.3 nhưng nghĩ rằng tôi có 2,7 nổi xung quanh
bclayman

8
Bạn không sử dụng phiên bản 3, bạn đang sử dụng phiên bản 2 và bạn có hai bản sao Python phiên bản 2 trên máy mac của mình, một bản đi kèm với OSX và bản còn lại bạn đã cài đặt. Vì vậy, tổng thể - có vẻ như bạn có ba phiên bản Python; Python3, Python2 (bạn đã cài đặt), Python2 (đi kèm với hệ thống). Có vẻ như bạn không sử dụng đúng môi trường ở đây; nơi bạn đã cài đặt Flask không phải là mặc định của hệ thống và đây có thể là nguyên nhân khiến bạn đau đầu.
Burhan Khalid

Câu trả lời:


145

Thử xóa virtualenv bạn đã tạo. Sau đó, tạo một virtualenv mới với:

virtualenv flask

Sau đó:

cd flask

Bây giờ hãy kích hoạt virtualenv:

source bin/activate

Bây giờ bạn sẽ thấy (flask)ở bên trái của dòng lệnh.

Hãy cài đặt bình:

pip install flask

Sau đó, tạo một tệp có tên hello.py(LƯU Ý: xem UPDATE Flask 1.0.2bên dưới):

from flask import Flask
app = Flask(__name__)

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

if __name__ == "__main__":
    app.run()

và chạy nó với:

python hello.py

CẬP NHẬT Bình 1.0.2

Với bản phát hành bình mới, không cần phải chạy ứng dụng từ tập lệnh của bạn. hello.pybây giờ sẽ trông như thế này:

from flask import Flask
app = Flask(__name__)

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

và chạy nó với:

FLASK_APP=hello.py flask run

Đảm bảo ở bên trong thư mục hello.pykhi chạy lệnh mới nhất.

Tất cả các bước trước khi tạo hello.py cũng áp dụng cho trường hợp này


3
Bạn có thể đặt nó ở bất cứ đâu miễn là bạn chạy nó với virtualenv được bật.
Rollback

Xin chào, tôi rất mới đối với python. Mọi thứ hoạt động tốt với virtualenv trong thiết bị đầu cuối. Nhưng, vấn đề của tôi là tôi đang sử dụng IDE Atom ... nguyên tử có thể chạy mã trên cùng một môi trường virtualenv không?
boog

52

Đối với python 3 sử dụng

pip3 cài đặt bình


4
Sau khi thay đổi phiên bản python của tôi từ 2.7 thành 3, nó đã hoạt động!
Ricardo Silva

Vâng, điều này hoạt động! Thay vì thực hiện pip install flask (dành cho python 2), nếu bạn đang sử dụng python3, bạn cần sử dụng pip3 install flask hoặc các phần mở rộng khác của bình. Để thay đổi phiên bản python của bạn, bạn có thể sử dụng bí danh python = "python3".
Kourosh

11

Cách duy nhất tôi có thể giải quyết là thêm người dùng python dir vào tệp myapp.wsgi. Ví dụ:

sys.path.append('/home/deployer/anaconda3/lib/python3.5/site-packages')

Tôi đoán rằng nếu bạn cài đặt các gói trong môi trường chung, bạn sẽ không gặp vấn đề gì, nhưng tôi đã cài đặt các gói python của mình với tư cách người dùng.


hoặc bằng cách làm điều nàyexport PYTHONPATH=/root/environments/my_env/lib/python3.6/site-packages/
Carlos Oliveira

7

Sau khi kích hoạt môi trường ảo và cài đặt Flask, tôi đã tạo một tệp app.py. Tôi chạy nó như thế này: python -m flask run. Hy vọng điều này sẽ giúp ích!


Không chắc tại sao điều này lại hoạt động, có thể là điều gì đó liên quan đến đường dẫn. Bất kỳ cái nhìn sâu sắc về điều này?
nscalf

5

Tôi đã gặp sự cố tương tự với trình kích hoạt.

Lý do cho điều đó là tôi luôn sử dụng

sudo pip install flask

nhưng vì một số lý do đó không phải lúc nào cũng là cách để đi. Đôi khi, bạn phải làm chỉ

pip install flask

Một vấn đề khác là đôi khi mọi người gõ pip install Flaskvới chữ F

Đăng cái này ở đây phòng khi ai đó gặp khó khăn. Hãy cho tôi biết nếu nó có ích.

Liên kết hữu ích: Sự khác biệt giữa cài đặt pip và cài đặt pip sudo là gì?


5

Đây là những gì làm việc cho tôi,

sudo -H pip install flask

Hoặc đối với pip3 (python3) sử dụng:

sudo -H pip3 install flask

Chú thích

Nếu bạn đang sử dụng virtualenv, bạn pip freeze >> requirements.txt nên cho phép các gói đã cài đặt được liệt kê ở một nơi. Các sudolệnh và -Hcờ. Để biết thêm về sudo's -Hcờ, xem Paul của câu trả lời . Hy vọng điều này sẽ giúp bạn.


3

Tôi đang sử dụng python2 nhưng đã cài đặt cái này: sudo apt-get install libapache2-mod-wsgi-py3

Thay vì: sudo apt-get install libapache2-mod-wsgi

Chỉnh sửa cài đặt đã giải quyết được sự cố không có bình.


1
Ah đó là những điều đơn giản. Tôi có wsgi libapache mod sai trong dockerfile của tôi sau khi nâng cấp lên python 3 ... có 1
Craicerjack

3

Trong trường hợp của tôi, giải pháp đơn giản như khởi động môi trường ảo của tôi như vậy:

$ venv/scripts/activate

Hóa ra tôi vẫn chưa quen với Python :)


2
  1. Biên tập /etc/apache2/sites-available/FlaskApp.conf
  2. Thêm hai dòng sau trước dòng "WSGIScriptAlias":

WSGIDaemonProcess FlaskApp python-home=/var/www/FlaskApp/FlaskApp/venv/FlaskApp WSGIProcessGroup FlaskApp

  1. Khởi động lại Apache:service apache2 restart

Tôi cũng đang làm theo hướng dẫn về Flask và gặp vấn đề tương tự, tôi đã tìm ra cách này để khắc phục.

http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world


1

Đi tới tệp bình trong blog nhỏ, sau đó kích hoạt môi trường ảo với source bin/activate, sau đó đi tới bình / thùng và cài đặt bình và phần còn lại của các gói pip install flask,. Bạn sẽ thấy bình được liệt kê bên trong thư mục bin. Cố gắng chạy ./run.pylại từ blog nhỏ (hoặc từ bất kỳ nơi nào bạn có tệp).


1

Ngay cả tôi cũng đề nghị u virtualenv, Điều này cũng có thể giải quyết vấn đề của bạn.

sudo apt install python-flask

Nếu bạn muốn triển khai trong máy chủ sản xuất thì hãy tiếp tục với giải pháp trên, khác sử dụng virtualenv.


1

Đây là những gì đã làm việc cho tôi khi tôi gặp lỗi tương tự trong Windows; 1. Cài đặt virtualenv

pip install virtualenve
  1. Tạo một virtualenv

    bình virtualenv

  2. Điều hướng đến Tập lệnh và kích hoạt virtualenv

    kích hoạt

  3. Cài đặt bình

    python -m pip cài đặt bình

  4. Kiểm tra xem bình đã được lắp chưa

    danh sách pip python -m


0

nhập chế độ tương tác python của bạn sau đó:

import sys

sys.path

nó sẽ in đường dẫn của bạn. Kiểm tra bình ướt đã được lắp vào đường dẫn sys.path.

Đối với MacOS, đường dẫn python nằm trong /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

Nhưng pip sẽ cài đặt gói python theo mặc định trong /Library/Python/2.7/site-packages

Đó là lý do tại sao nó không hoạt động cho MacOS.


0

Tập lệnh bình rất hay để khởi động máy chủ phát triển cục bộ, nhưng bạn sẽ phải khởi động lại nó theo cách thủ công sau mỗi lần thay đổi mã của mình. Điều đó không tốt lắm và Flask có thể làm tốt hơn. Nếu bạn bật hỗ trợ gỡ lỗi, máy chủ sẽ tự tải lại khi thay đổi mã và nó cũng sẽ cung cấp cho bạn trình gỡ lỗi hữu ích nếu có sự cố. Để bật chế độ gỡ lỗi, bạn có thể xuất biến môi trường FLASK_DEBUG trước khi chạy máy chủ: forexample tệp của bạn là hello.py

$ export FLASK_APP=hello.py
$ export FLASK_DEBUG=1
$ flask run

0

trong trường hợp của tôi sử dụng Docker, tệp .env của tôi không được sao chép, vì vậy các env vars sau không được đặt:

.env.local: FLASK_APP=src/app.py

vì vậy trong tôi Dockerfiletôi phải bao gồm:

FROM deploy as dev
COPY env ./env

đã được tham chiếu trong docker-compost.yml

env_file: ./env/.env.local

một điều khác mà tôi phải chú ý là biến đường dẫn để đảm bảo môi trường của tôi được sử dụng

ENV PATH $CONDA_DIR/envs/:my_environment_name_from_yml_file:/bin:$CONDA_DIR/bin:$PATH```

0

câu trả lời của tôi chỉ dành cho bất kỳ người dùng nào sử dụng dự án Web Visual Studio Flesk:

Chỉ cần nhấp chuột phải vào "Môi trường Python" và nhấp để "Thêm môi trường"


0

Nếu bạn đang sử dụng Pycharm thì đây là vấn đề môi trường ảo.

Vì vậy, tại thời điểm tạo dự án Python của bạn, bạn sẽ phải chọn tùy chọn "Trình thông dịch hiện có" -> nhấp vào "Trình thông dịch hệ thống" -> chọn tùy chọn chính xác, ví dụ "* \ AppData \ Local \ Programs \ Python \ Python3.6 \ python.exe ”.

Bạn cũng có thể sử dụng 'Env ảo mới', nhưng tôi vừa đưa ra bản sửa lỗi nhanh sẽ hoạt động cho người dùng Pycharm.


0

Một điều - nếu bạn đang sử dụng python3, chắc chắn rằng bạn đang bắt đầu máy chủ của bạn với python3 server.py, khôngpython server.py


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.