Flask ImportError: Brak modułu o nazwie Flask

103

Postępuję zgodnie z tutorialem Flask tutaj:

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

Dochodzę do punktu, w którym próbuję ./run.py i otrzymuję:

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

Wygląda to podobnie do:

ImportError: Brak modułu o nazwie flask

Ale ich rozwiązania nie są pomocne. Dla porównania, ja nie mam folder o nazwie kolby których jeden użytkownik wspomniano może powodować problemy.

bclayman
źródło
1
@MalikBrahimi Kiedy uruchamiam Pythona, a następnie importuję flask i sprawdzam, jaką wersję mam zainstalowaną, zwraca "0.10.1". Więc wygląda na to, że mam to zainstalowane ...
bclayman
4
Mówisz, że jeśli uruchomisz Pythona, a potem nie import flaskmasz żadnych błędów? Czy to możliwe, że masz wersje Pythona na swoim komputerze?
ari
2
Czy możesz wstawić import sys; print sys.pathdo tego pliku (przed wierszem, w którym wystąpił błąd), a także uruchomić to w interaktywnym zachęcie?
ari
1
@ari Próbowałem zrobić coś w wirtualnym środowisku, ale mogłem to jakoś zepsuć? i tak, używam Pythona 3.3, ale myślę, że mam 2,7 pływające po okolicy
bclayman
8
Nie używasz wersji 3, używasz wersji 2 i masz dwie kopie Pythona w wersji 2 na komputerze Mac, jedną dostarczoną z systemem OSX, a drugą zainstalowaną. Podsumowując - wygląda na to, że masz trzy wersje Pythona; Python3, Python2 (zainstalowałeś), Python2 (dostarczone z systemem). Wygląda na to, że nie używasz tutaj odpowiedniego środowiska; gdzie zainstalowałeś Flask nie jest domyślnym ustawieniem systemu i prawdopodobnie jest to przyczyną twojego bólu głowy.
Burhan Khalid

Odpowiedzi:

148

Spróbuj usunąć utworzony przez siebie virtualenv. Następnie utwórz nowy virtualenv za pomocą:

virtualenv flask

Następnie:

cd flask

Teraz aktywujmy virtualenv:

source bin/activate

Teraz powinieneś zobaczyć (flask) po lewej stronie wiersza poleceń.

Zainstalujmy kolbę:

pip install flask

Następnie utwórz plik o nazwie hello.py(UWAGA: patrz UPDATE Flask 1.0.2poniżej):

from flask import Flask
app = Flask(__name__)

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

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

i uruchom go z:

python hello.py

UPDATE Flask 1.0.2

Dzięki nowej wersji Flask nie ma potrzeby uruchamiania aplikacji ze skryptu. hello.pypowinien teraz wyglądać tak:

from flask import Flask
app = Flask(__name__)

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

i uruchom go z:

FLASK_APP=hello.py flask run

Upewnij się, że znajdujesz się w folderze, w którym hello.py znajduje się podczas uruchamiania najnowszego polecenia.

Wszystkie kroki przed utworzeniem pliku hello.py dotyczą również tego przypadku

Wycofywanie
źródło
3
Możesz go umieścić w dowolnym miejscu, o ile uruchomisz go z włączonym virtualenv.
Wycofanie
Cześć, jestem nowy w Pythonie. Wszystko działa dobrze z virtualenv w terminalu. Ale mój problem polega na tym, że używam IDE Atom ... czy atom może uruchomić kod w tym samym środowisku virtualenv?
boog
55

W przypadku Pythona 3 użyj

pip3 zainstalować kolbę

Khalid Bin Huda
źródło
4
Po zmianie mojej wersji Pythona z 2.7 na 3 zadziałało!
Ricardo Silva
Tak, to działa! Zamiast robić pip install flask (co jest dla Pythona 2), jeśli używasz python3, musisz użyć pip3 install flask lub innych rozszerzeń flask. Aby zmienić wersję Pythona, możesz użyć aliasu python = "python3".
Kourosh
12

Jedynym sposobem, w jaki mogłem rozwiązać, było dodanie katalogu python moich użytkowników do pliku myapp.wsgi. Jako przykład:

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

Wydaje mi się, że jeśli zainstalujesz pakiety w środowisku globalnym, nie powinieneś mieć problemu, ale moje pakiety Pythona zostały zainstalowane jako użytkownik.

juliański
źródło
lub robiąc toexport PYTHONPATH=/root/environments/my_env/lib/python3.6/site-packages/
Carlos Oliveira,
Pracowało dla mnie solidnie, dzięki!
ajoros
7

Po aktywacji środowiska wirtualnego i zainstalowaniu Flaska utworzyłem plik app.py. Biegnę to tak: python -m flask run. Mam nadzieję, że to pomoże!

Bogdan001
źródło
Nie wiem, dlaczego to działa, prawdopodobnie ma to związek ze ścieżką. Jakieś spostrzeżenia na ten temat?
nscalf
5

Miałem podobny problem z flasggerem.

Powodem tego było to, że zawsze używam

sudo pip install flask

ale z jakiegoś powodu nie zawsze jest to właściwe rozwiązanie. Czasami musisz po prostu zrobić

pip install flask

Innym problemem jest to, że czasami ludzie piszą pip install Flaskz rozszerzeniem czapką F

Publikowanie tego tutaj na wypadek, gdyby ktoś utknął. Daj mi znać, jeśli to pomogło.

Przydatny link: Jaka jest różnica między instalacją pip a instalacją sudo pip?

aneesh joshi
źródło
5

to działa dla mnie,

sudo -H pip install flask

Lub dla pip3 (python3) użyj:

sudo -H pip3 install flask

Dygresja

Jeśli używasz virtualenv, dobrym pomysłem pip freeze >> requirements.txt jest pozostawienie zainstalowanych pakietów na liście w jednym miejscu. sudoPoleceń i -Hflag. Aby uzyskać więcej informacji na sudotemat -Hflagi, spójrz na odpowiedź Paula . Mam nadzieję, że to ci pomoże.

rawplutonium
źródło
3

Używałem Python2, ale zainstalowałem to: sudo apt-get install libapache2-mod-wsgi-py3

Zamiast: sudo apt-get install libapache2-mod-wsgi

Poprawienie instalacji rozwiązało problem braku kolby.

Norman Pilusa
źródło
1
Ach, to proste rzeczy. Mam zły wsgi mod libapache w moim pliku dockerfile po aktualizacji do Pythona 3 ... mam +1
Craicerjack
3

W moim przypadku rozwiązanie było tak proste, jak uruchomienie mojego wirtualnego środowiska w następujący sposób:

$ venv/scripts/activate

Okazuje się, że wciąż jestem świeży w Pythonie :)

Oferta
źródło
2
  1. Edytować /etc/apache2/sites-available/FlaskApp.conf
  2. Dodaj następujące dwa wiersze przed wierszem „WSGIScriptAlias”:

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

  1. Zrestartuj Apache:service apache2 restart

Ja też postępuję zgodnie z samouczkiem Flask i napotkałem ten sam problem, znalazłem sposób, aby go naprawić.

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

NingAnMe
źródło
1

Przejdź do pliku kolby mikroblogu, a następnie aktywować z wirtualnego środowiska source bin/activate, a następnie przejść do kolby / bin i zainstalować kolby, a reszta pakietów pip install flask. Zobaczysz kolbę wymienioną w katalogu bin. Spróbuj uruchomić ./run.pyponownie z mikroblogu (lub z dowolnego miejsca, w którym masz plik).

Miguel
źródło
1

Nawet ja też sugeruję u virtualenv, to może również rozwiązać twój problem.

sudo apt install python-flask

Jeśli chcesz wdrożyć na serwerze produkcyjnym, skorzystaj z powyższego rozwiązania, w przeciwnym razie użyj virtualenv.

yunus
źródło
1

To właśnie zadziałało, gdy otrzymałem podobny błąd w systemie Windows; 1. Zainstaluj virtualenv

pip install virtualenve
  1. Utwórz virtualenv

    virtualenv kolba

  2. Przejdź do Scripts i aktywuj virtualenv

    Aktywuj

  3. Zainstaluj Flask

    python -m pip install flask

  4. Sprawdź, czy kolba jest zainstalowana

    python -m lista pip

sammy ongaya
źródło
0

wejdź w tryb interaktywny Pythona, a następnie:

import sys

sys.path

wydrukuje twoją ścieżkę. Sprawdź, czy kolba z mokrą wodą jest zainstalowana w sys.path.

W przypadku MacOS ścieżka Pythona znajduje się w /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

Ale pip domyślnie zainstaluje pakiet Pythona w /Library/Python/2.7/site-packages

Dlatego nie działa na MacOS.

Tao W
źródło
0

Skrypt flask jest przydatny do uruchamiania lokalnego serwera programistycznego, ale po każdej zmianie kodu musiałbyś go ponownie uruchomić ręcznie. To nie jest zbyt miłe, a Flask radzi sobie lepiej. Jeśli włączysz obsługę debugowania, serwer będzie ładował się ponownie po zmianie kodu, a także zapewni pomocny debuger, jeśli coś pójdzie nie tak. Aby włączyć tryb debugowania, możesz wyeksportować zmienną środowiskową FLASK_DEBUG przed uruchomieniem serwera: na przykład twój plik to hello.py

$ export FLASK_APP=hello.py
$ export FLASK_DEBUG=1
$ flask run
yasin lachini
źródło
0

w moim przypadku przy użyciu Dockera mój plik .env nie został skopiowany, więc nie ustawiono następujących zmiennych env:

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

więc w moim Dockerfilemusiałem uwzględnić:

FROM deploy as dev
COPY env ./env

do którego odwołano się w docker-compose.yml

env_file: ./env/.env.local

Kolejną rzeczą, na którą musiałem zwrócić uwagę, jest zmienna ścieżki, aby upewnić się, że moje środowisko jest używane

ENV PATH $CONDA_DIR/envs/:my_environment_name_from_yml_file:/bin:$CONDA_DIR/bin:$PATH```
Sonic Soul
źródło
0

moja odpowiedź tylko dla wszystkich użytkowników korzystających z projektu Visual Studio Flesk w sieci Web:

Kliknij prawym przyciskiem myszy „Środowisko Pythona” i kliknij „Dodaj środowisko”

hossein andarkhora
źródło
0

Jeśli używasz Pycharm, jest to problem ze środowiskiem wirtualnym.

Tak więc w momencie tworzenia projektu w Pythonie będziesz musiał wybrać opcję „Istniejący interpreter” -> kliknij „System Interpreter” -> wybierz odpowiednią opcję, na przykład „* \ AppData \ Local \ Programs \ Python \ Python3.6 \ python.exe ”.

Możesz również użyć „New Virtual Env”, ale właśnie podałem szybką poprawkę, która powinna działać dla użytkowników Pycharm.

Ashish Bansal
źródło
0

Inna sprawa - jeśli używasz python3, upewnij się, że uruchamiasz serwer z python3 server.py, niepython server.py

Evan
źródło