设置 Windows 的默认编码为 UTF-8
因为 Windows 的中文环境默认编码是 GBK
,这会在后面导致一些其他的问题,所以首先需要将操作系统的默认编码设置为 UTF-8
。
点击开始菜单,直接输入 control pannel
打开控制面板,选择 时钟和区域
-区域
,弹窗页面打开管理
页面,点击 更改系统区域设置
按钮,弹窗页面勾选Beta 版:使用 Unicode UTF-8 提供全球语言支持
,完成后系统会提示重启电脑后才能生效,直接点击重启。
配置 pip
配置 pip,设置国内镜像,因为 poetry 在下载过程中,会使用到 pip 下载一些安装包,如果不设置安装过程可能会很漫长甚至会失败。这里直接粘贴设置方法:
Pip的配置文件为用户根目录下的:~/.pip/pip.conf(Windows路径为:C:\Users
[global]
index-url = https://repo.huaweicloud.com/repository/pypi/simple
trusted-host = repo.huaweicloud.com
timeout = 120
安装 poetry
因为国内网络的关系,导致 poetry 的安装可能比较困难,这里建议将安装的步骤进行拆解。
- 下载 poetry 的源码
git clone https://github.com/python-poetry/poetry.git
- 开始安装
网络上有一些方法,是去cd poetry python install-poetry.py
https://github.com/python-poetry/release
下载安装包后进行本地安装,但是此方法无法生成poetry.exe
文件,如果使用pycharm
的最新版本,会无法找到 poetry 的路径,同时手动指定poetry.cmd
也无效,故不要使用那些方法。
vscode 安装插件
vscode 安装 Python Extension Pack
。
生成项目
首先生成项目:
mkdir -p fastapi
cd fastapi
poetry init(会有一些交互问题,基本上直接回车即可)
项目生成后,手动修改 pyproject.toml
。将以下内容追加到文件的最后:
[[tool.poetry.source]]
name = "aliyun"
default = true
url = "https://mirrors.aliyun.com/pypi/simple/"
最后,产生虚拟环境:
poetry install(此步骤会真正的创建基于 poetry 的虚拟环境)
虚拟环境产生后,在 vscode 中手动选择对应的虚拟环境即可(截至当前,vscode 可以自动识别到 poetry 的虚拟环境目录)。
Hello world
在 fastapi
下建立一个 src
目录用于存储所有的代码。
在 src
目录下创建名为 app
的 python 包。同时在此包中创建 main.py
文件。
最终目录样式如下:
FastAPIDemo$ tree
.
├── poetry.lock
├── pyproject.toml
└── src
└── app
├── __init__.py
└── main.py
编辑 main.py
文件,将以下的内容复制进去(文件由 pycharm 自动生成):
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
@app.get("/hello/{name}")
async def say_hello(name: str):
return {"message": f"Hello {name}"}
因为虚拟环境还没有安装依赖,所以首先我们先安装依赖:
poetry add fastapi uvicorn
安装完毕后,运行以下命令启动服务:
cd src
poetry run uvicorn app.main:app --reload
## 注释
# app. main: app
# 名为 app 的 python 包 main.py main.py 中的 app = FastAPI()
使用 vscode 的运行和调试功能执行程序
打开 运行和调试侧边栏
,选择新建 launch.json
,输入以下内容后保存即可:
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Run FastAPI server",
"type": "python",
"request": "launch",
"module": "uvicorn",
"args": [
"app.main:app",
"--reload"
],
"cwd": "${workspaceFolder}\\src"
}
]
}