10

私はこれを持っています/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()

私が走るとき:

$ gunicorn app:app -b 127.0.0.2:8000

それは言う:

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

つまり、__name__アプリのはですapp__main__ifステートメントを実行する必要がある わけではありません。ディレクトリに
空を入れてみました。__init__.pyこれが私の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;
        }
}

編集

...このアプリ'Hello world'、サイトにアクセスすると印刷されますが。ポイントは、私が__name__等しくする必要があるということ'__main__'です。また、なぜそうでないのか、どうやって等しくするのかを知りたいだけです__main__

編集2

app.run()... Gunicornの目的であるため、実行する必要がないというひらめきがありました。ええと。しかし、私はまだなぜそう__name__ではないのかを理解したいと思います'__main__'

4

1 に答える 1

16

Pythonは、スクリプトがPythonインタープリターのエントリポイントになるときに設定__name__します。"__main__"Gunicornはスクリプトをインポートするため、実行__name__のスクリプトはエントリポイントではないため、に設定されません"__main__"

于 2013-03-02T15:29:09.743 に答える