J'essaie d'exécuter une application Flask avec flask run
mais quoi qu'il arrive, je reçois cette erreur:
Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.
J'utilise virtualenv dans mon projet et j'exécute l'application sur le port 80, donc j'exécute la commande en tant que superutilisateur. En fin de compte, j'ai juste besoin d'utiliser le flask db init
comme décrit dans Flask-Migrate docs , mais flask
doit être capable de trouver l'application pour ce faire. Voici ce que j'ai essayé, sans succès:
Exportation du FLASK_APP
variable d'environnement, en veillant à ce qu'elle soit dans mon profil bash, puis en activant virtualenv
$ export FLASK_APP=run.py
$ printenv FLASK_APP
run.py
$ . env/bin/activate
(env) $ Sudo flask run
Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.
Activer virtualenv, puis exporter FLASK_APP
$ . env/bin/activate
(env) $ export FLASK_APP=run.py
(env) $ printenv FLASK_APP
run.py
(env) Sudo flask run
Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.
Les deux ci-dessus avec le chemin complet, /Users/me/code/project/run.py
$ printenv FLASK_APP
/Users/me/code/project/run.py
Structure du projet
myproject/
├──app/
| ├── __init__.py
| ├── models.py
| ├── templates/
| └── views.py
├── tests/
├── run.py
├── requirements.txt
└── config.py
Jusqu'à présent, rien n'a fonctionné et le message d'erreur est le même dans chaque cas. Que puis-je faire pour corriger cette erreur?
Quand je laisse tomber Sudo
de Sudo flask run
, Flask trouve $FLASK_APP
. Cependant, j'obtiens le message d'erreur socket.error: [Errno 13] Permission denied
. Je ne vois pas de solution, car Flask ne peut pas trouver $FLASK_APP
quand je cours en tant que superutilisateur. On dirait une logique circulaire.
J'ai réussi à exécuter Flask en changeant le port de 80 en 5000 et en supprimant Sudo
avec flask run
. C'est très bien, je devrai trouver un moyen d'exécuter l'application sur le port 80 en production.
J'ai pu exécuter flask db init
après avoir supprimé et recréé ma base de données et supprimé les appels à db.create_all
.
Edit - 27/04/17 le port 80 a en effet été bloqué par le pare-feu sur mon serveur (le pare-feu est hors de mon contrôle) donc l'exécution de l'application sur un port ouvert a résolu le problème.
En supposant que vous appelez app=App(__name__)
dans votre fichier init. Essayez ceci, même si techniquement cela devrait aussi fonctionner avec run.py.
export FLASK_APP=app/__init__.py; flask run
Essayez également de faire un echo $FLASK_APP
plus tard pour voir si la valeur en fait est stockée dans la variable d'environnement qui flask accède directement et pas seulement au profil bash.
Si vous êtes sous Windows, assurez-vous qu'il n'y a pas d'espace autour de l'égal:
set FLASK_APP=app.py
au lieu de
set FLASK_APP = app.py
C'est ce qui m'est arrivé. J'ai eu l'erreur "Vous n'avez pas fourni la variable d'environnement FLASK_APP" à cause des espaces.
Sous Powershell, vous devez définir le FLASK_APP
variable d'environnement comme suit:
$env:FLASK_APP = "webapp"
Vous devriez alors pouvoir exécuter python -m flask run
dans le dossier hello_app. En d'autres termes, PowerShell gère les variables d'environnement différemment, donc la ligne de commande standard set FLASK_APP=webapp
ne fonctionnera pas.