J’ai ceci de /home/myname/myapp/app.py
:
from flask import Flask app = Flask(__name__) print __name__ @app.route('/') def index(): return "Hello world!" if __name__ == '__main__': print 'in if' app.run()
Quand je cours:
$ gunicorn app:app -b 127.0.0.2:8000
Ça dit:
2013-03-01 11:26:56 [21907] [INFO] Starting gunicorn 0.17.2 2013-03-01 11:26:56 [21907] [INFO] Listening at: http://127.0.0.2:8000 (21907) 2013-03-01 11:26:56 [21907] [INFO] Using worker: sync 2013-03-01 11:26:56 [21912] [INFO] Booting worker with pid: 21912 app
Donc, le __name__
de l’application est app
. Pas __main__
comme si j’avais besoin de lancer l’instruction if.
J’ai essayé de mettre un __init__.py
vide dans le répertoire. Voici mes nginx sites-enabled default
:
server { #listen 80; ## listen for ipv4; this line is default and implied #listen [::]:80 default_server ipv6only=on; ## listen for ipv6 root /home/myname/myapp; # Make site accessible from http://localhost/ server_name localhost; location / { proxy_pass http://127.0.0.2:8000; } }
… Bien que cette application imprime 'Hello world'
lorsque je visite le site. Le fait est que j’ai besoin de __name__
pour égaler '__main__'
. Je veux aussi juste savoir pourquoi cela ne fonctionne pas et comment le rendre égal à __main__
.
… J’ai juste eu l’épiphanie que je n’ai pas besoin de lancer app.run()
car c’est pour ça que Gunicorn est. Duh. Mais je voudrais quand même savoir pourquoi __name__
n’est pas '__main__'
Python définit __name__
sur "__main__"
lorsque le script est le point d’entrée de l’interpréteur Python. Étant donné que Gunicorn importe le script qu’il exécute, ce script ne sera pas le point d’entrée et __name__
ne sera donc pas défini sur "__main__"
.