Flask Gunicorn application ne peut pas obtenir __name__ pour égaler ‘__main__’

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; } } 

modifier

… 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__ .

Modifier 2

… 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__" .