我的main.py中有以下代码段:
import os
from app import create_app
from models import db, bcrypt
if __name__ == '__main__':
HOST = os.environ.get('SERVER_HOST', 'localhost')
try:
PORT = int(os.environ.get('SERVER_PORT', '5555'))
except ValueError:
PORT = 5555
env_name = os.getenv('FLASK_ENV', "Please set FLASK_ENV")
print("env_name: ", env_name)
app = create_app(env_name)
我在flask run
中使用pipenv shell
运行它,并在打印出env_name
的行中遇到以下错误。我已经尝试了set FLASK_ENV=development
(Windows 10)和使用.env
,但无济于事。我使用python-3.8.3
(src-4Nvvrxp5) C:\Projects\Python\PythonFlaskRestAPI\src>flask run
* Serving Flask app "main.py" (lazy loading)
* Environment: development
* Debug mode: on
* Restarting with stat
env_name: <flask.cli.ScriptInfo object at 0x000002D6BA598940>
* Debugger is active!
* Debugger PIN: 269-678-937
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
任何建议和见识都受到赞赏。
因此,经过进一步的研究,我能够(在某种程度上)在本地重现您的问题。如下图所示。
现在发生这种情况的原因是来自烧瓶官方documentation的本段:
您要关注的是这个:
因此,没有发生错误,该代码正在按预期方式工作。如果应用程序工厂仅接受一个参数,并且工厂名称后没有括号,则将[[ScriptInfo实例传递作为位置参数。
现在,如果您担心的是(set FLASK_ENV = development)命令没有正确设置它的事实,那么我要指出的是,它的确设置正确,如您在OP中所见:
(src-4Nvvrxp5) C:\Projects\Python\PythonFlaskRestAPI\src>flask run
* Serving Flask app "main.py" (lazy loading)
* Environment: development
* Debug mode: on
* Restarting with stat
上面终端中的第三行显示“ * Environment:development”,而根据documentation的默认值为“ * Environment:production”让我知道这是否解决了您的疑虑和疑问:D。祝你好运!