From 14239659121f9026d3b55b5362a2adce97772a78 Mon Sep 17 00:00:00 2001 From: eric Date: Sun, 18 Dec 2022 21:12:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20docker=E6=9C=AC=E5=9C=B0=E8=B0=83?= =?UTF-8?q?=E8=AF=95:=20-=201.=20import=E4=B8=8D=E5=90=8C=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=AF=AD=E6=B3=95=E4=B8=8D=E4=B8=80=E8=87=B4=20-=202.?= =?UTF-8?q?=20mysql=E5=85=81=E8=AE=B8=E8=BF=9C=E7=A8=8B=E8=AE=BF=E9=97=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cloudbase/container/debug.json | 12 ++++++++ Dockerfile | 6 ++-- Dockerfile.development | 10 +++++++ __pycache__/main.cpython-310.pyc | Bin 334 -> 0 bytes app/__pycache__/crud.cpython-310.pyc | Bin 2039 -> 0 bytes app/__pycache__/database.cpython-310.pyc | Bin 503 -> 0 bytes app/__pycache__/main.cpython-310.pyc | Bin 3696 -> 0 bytes app/__pycache__/models.cpython-310.pyc | Bin 1063 -> 0 bytes app/database.py | 13 --------- __init__.py => cloudcontainers/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 128 bytes {app => cloudcontainers/app}/__init__.py | 0 .../app/__pycache__/crud.cpython-310.pyc | Bin 0 -> 2055 bytes .../app/__pycache__/database.cpython-310.pyc | Bin 0 -> 521 bytes .../app/__pycache__/main.cpython-310.pyc | Bin 0 -> 3886 bytes .../app/__pycache__/models.cpython-310.pyc | Bin 0 -> 1105 bytes .../app}/__pycache__/schemas.cpython-310.pyc | Bin {app => cloudcontainers/app}/crud.py | 2 +- cloudcontainers/app/database.py | 15 ++++++++++ {app => cloudcontainers/app}/main.py | 16 +++++++++-- {app => cloudcontainers/app}/models.py | 10 +++---- {app => cloudcontainers/app}/schemas.py | 0 {app => cloudcontainers/app}/sql_app.db | Bin 32768 -> 32768 bytes docker-compose.yml | 24 ++++++++++++++++ requirements.txt | 26 +++++++++++++++--- 25 files changed, 106 insertions(+), 28 deletions(-) create mode 100644 .cloudbase/container/debug.json create mode 100644 Dockerfile.development delete mode 100644 __pycache__/main.cpython-310.pyc delete mode 100644 app/__pycache__/crud.cpython-310.pyc delete mode 100644 app/__pycache__/database.cpython-310.pyc delete mode 100644 app/__pycache__/main.cpython-310.pyc delete mode 100644 app/__pycache__/models.cpython-310.pyc delete mode 100644 app/database.py rename __init__.py => cloudcontainers/__init__.py (100%) create mode 100644 cloudcontainers/__pycache__/__init__.cpython-310.pyc rename {app => cloudcontainers/app}/__init__.py (100%) create mode 100644 cloudcontainers/app/__pycache__/crud.cpython-310.pyc create mode 100644 cloudcontainers/app/__pycache__/database.cpython-310.pyc create mode 100644 cloudcontainers/app/__pycache__/main.cpython-310.pyc create mode 100644 cloudcontainers/app/__pycache__/models.cpython-310.pyc rename {app => cloudcontainers/app}/__pycache__/schemas.cpython-310.pyc (100%) rename {app => cloudcontainers/app}/crud.py (98%) create mode 100644 cloudcontainers/app/database.py rename {app => cloudcontainers/app}/main.py (82%) rename {app => cloudcontainers/app}/models.py (70%) rename {app => cloudcontainers/app}/schemas.py (100%) rename {app => cloudcontainers/app}/sql_app.db (98%) create mode 100644 docker-compose.yml diff --git a/.cloudbase/container/debug.json b/.cloudbase/container/debug.json new file mode 100644 index 0000000..6d493b8 --- /dev/null +++ b/.cloudbase/container/debug.json @@ -0,0 +1,12 @@ +{ + "containers": [ + { + "name": "fastapiweb", + "domain": "", + "ip": "", + "mode": "compose", + "containerId": "2eff8c8bd0d2909a8b806e8c12acc9fa0362494c45ea739b23c9c66cf59312b0" + } + ], + "config": {} +} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 1f2230c..846a554 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # 1、从官方 Python 基础镜像开始 -FROM python:3.9 +FROM python:3.10 # 2、将当前工作目录设置为 /code # 这是放置 requirements.txt 文件和应用程序目录的地方 @@ -13,7 +13,7 @@ COPY ./requirements.txt /code/requirements.txt RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt # 5、复制 FastAPI 项目代码 -COPY ./app /code/app +COPY ./cloudcontainers/app /code/app # 6、运行服务 -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] \ No newline at end of file +CMD ["uvicorn", "cloudcontainers.app.main:app", "--host", "0.0.0.0", "--port", "80"] \ No newline at end of file diff --git a/Dockerfile.development b/Dockerfile.development new file mode 100644 index 0000000..b4ec85d --- /dev/null +++ b/Dockerfile.development @@ -0,0 +1,10 @@ +# Auto-generated by weixin cloudbase vscode extension +FROM ccr.ccs.tencentyun.com/weixincloud/wxcloud-livecoding-toolkit:latest AS toolkit +FROM python:3.10 +COPY --from=toolkit nodemon /usr/bin/nodemon +WORKDIR /code +COPY ./requirements.txt /code/requirements.txt +RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt +COPY ./cloudcontainers/app /code/app + +CMD [ "nodemon", "-x", "uvicorn cloudcontainers.app.main:app --host 0.0.0.0 --port 80", "-w", "/code", "-e", "java, js, mjs, json, ts, cs, py, go" ] \ No newline at end of file diff --git a/__pycache__/main.cpython-310.pyc b/__pycache__/main.cpython-310.pyc deleted file mode 100644 index 5ea4f34e06dc6c0971e39ca38a45f5c75dc0960d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmYjLJ5B>J5cSym6A;conQh_=AOr{@Xd)zpB5h~ZL$tz+EqhZy1qzp-gOYP_3%68U zfFc!RKuVr8&-2DJ^Tv)wTa561{L(Jy{Y+vLg2W+37!zrx!LS}00EVz+4M+YeG=Bpv zboR`a&}2HlWOeaH-K>UKo~ke$U7W8#wyCrUPU3?iqzj%vgXSI3u$acO#}L#UAGXiX z7`r#K-spGcbLw2vYAmk;`XJGFtvtbSJ6I=g$Wgg&hSzc;d)3`d+1 diff --git a/app/__pycache__/crud.cpython-310.pyc b/app/__pycache__/crud.cpython-310.pyc deleted file mode 100644 index a20b8624d9dc375135e7c11e9e44302fb21974e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2039 zcmaJ?&2QT_6emSW@>dea&6>1z(|rQf*2N9BV=)X!QJ@!Jf?aeG6p^0g$d*gW3p_Zt zUc0|whXm*)|IN<4?$qmY+iCC7cA_}&1n`OP$4Bw^KKPVxY}5!m|GfM&dF>JMH!9`F z2jyoN`Y#ZI2%3>04JpOBlQ}~cGCOA(4>@2gb3<2fNrfxD9v7bQ-}BHfAr(;tq*6j^ zq7F#aA`MxCT^nK(kh*AFtSLRQ4PWy_OFVe*h7F7ENO!OSwx5ZIV7qzGc313y?UuED z1h!4f$P>ypvFIzTBrF4rk<9WOp2~?#EJ1ITB;}&iGzlV2j?8d z5e)q;h#9#c1syn-^n&4gz-ROnHTRNGT=noR$T7L1-M}~QyNOg&;|+5mGi~@UaENiw z`cg^bq{4Ur%R(A2$%n(VxN;O8r(6(ML~X(A-xnR+q&rfjN$0iHr$s*Q^kQAa!E#rau2*gx*wPyTD3F)&dTCZjrRr9hj71FE z1}Fi$jRBO?NmNK(*ig(x6F1c78?2iMST~=en-4*|<7PRB*ZZ)#&P~kWF;Q?gNZ_r| zRXc#rxw^en0ijI;y>EenNFHZ0Dvt3@s?6GT@dR$Y?TU*NeIvNly;;eL)Kd?#jDtavk!qJ9NpMhDQR zcFDPecM&u;bA%(<2X@YYKA*8m=wC3qxt$9HI|A>9Tcf;C5_nGgvF=Op25JvO8*a_@ zXdG*OmMdYZsgB~LNPm-XsVhtPww&!Ya9Idj!^T&#r=;!&d|u4o;8%Bg@u`efKaC}h zuC9iro&dE%+BMv+8z5>NgLJrmExMuT#VOL+GSScr) znG}q52UovF@jVE`5xjHky}T4;fDHrkbKzW)k5teZw2zPU4{GzmZt}txUDGY)g>}P9 zem1hr*ph|S1BOB4 zu$OUO;x+8-M>fqinKr;-?JW>npva};~BpBZxev>~bA-{&^FhxgGHl;+z*ip->}LXsX8786N{;RlrzHt{I;I`%3s!P1j^m{zg@@plK#O zhzKoom%0NS+)*Hn@FMDu&~8K+W>tU?wCk+cf&X$Zd@wq~ z+8`{naf`C*Y~V`Qbs%Fa{AF0MREm9c(pjrxnhyBF?87$Y8{Mf_i!zm{C=5#3E1%(w z{K5Z04WDCuaGz(mkmd&q&Rd@kto!RXtL5tXi_@3y+mq$HKADj= diff --git a/app/__pycache__/main.cpython-310.pyc b/app/__pycache__/main.cpython-310.pyc deleted file mode 100644 index afb3bcfe213d8ac9a293afd8dc435ac3c5bfb7d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3696 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 diff --git a/app/database.py b/app/database.py deleted file mode 100644 index 45a8b9f..0000000 --- a/app/database.py +++ /dev/null @@ -1,13 +0,0 @@ -from sqlalchemy import create_engine -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker - -SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db" -# SQLALCHEMY_DATABASE_URL = "postgresql://user:password@postgresserver/db" - -engine = create_engine( - SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} -) -SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) - -Base = declarative_base() diff --git a/__init__.py b/cloudcontainers/__init__.py similarity index 100% rename from __init__.py rename to cloudcontainers/__init__.py diff --git a/cloudcontainers/__pycache__/__init__.cpython-310.pyc b/cloudcontainers/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba77ae692e17e5ad1f6a237f306699be14f1d71e GIT binary patch literal 128 zcmd1j<>g`k0xQn>$sqbMh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o2B*KRG`oRbNj( xIVZm~B{@H@Br!8DwWwG>K0Y%qvm`!Vub}c4hfQvNN@-529Y}LA6OdqG008N&88-j` literal 0 HcmV?d00001 diff --git a/app/__init__.py b/cloudcontainers/app/__init__.py similarity index 100% rename from app/__init__.py rename to cloudcontainers/app/__init__.py diff --git a/cloudcontainers/app/__pycache__/crud.cpython-310.pyc b/cloudcontainers/app/__pycache__/crud.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8a988b1b31de773df3e4679894544ca1892f4ee4 GIT binary patch literal 2055 zcmaJ?&2QT_6cS(CPIx=*0mN4#J=2E%|91$xOP*hLpX5$TzZY`LVoz=Lz^ zwfhr>1n4FI&Ca~;)YA^R?X>r3J5d~X0{F!DX{AAHK2&6)#G_RpW`E8lVcMy31& zp!^I&{{@0OoMg_BM1Sd6CDNAlwsvk8z&|?^qO+kP5E?QYj%d zUI(OVk%p+jt|s3Aq|Q4QYYCrk!Pk7==8xWaQNyC!!W%Tf_7naXY&Ra*?(ki(-L$q( zz_w)>`TQw=2KHN=o;cz2kKmOP5)+&Vtz|xfsjo#Q(&E^-{L};!EmSOd>Z0M|!8wC* z1VeufV&+^r1sS+koXZP+q5TA#`CwGZ!t~P@iwGZX#gae2H#82JN1k<(%H^!Rk6U zF{dYvg1h2`{t8{S4d|S!*OLkeZ6JUNE3vBlDhf;K3E($)@E%b(S8Wh$S*aZ~`JZ!f zx7q~}F6zYsD~E3_506i$vCYVH-1Zd3GY}s+2*dQ592+l_P<<&@!1BR4jw2X19T4R( z%?Ok{n=J}|U672Q_j+0s3Zrajl4aM6Tv{fGu12i7B&|Qgb1`HcqQ1cW3`_W4%&=JT zrXWRq2x3MC(6@G+3m5MuXmsXsm(%z3f&zUuqgT++V0L?37YKF;b{uVv@Kg#o=1{$W)dxjo*qcHO)u*^- z^MPSkpQBhQCz}}w#=48EU!wR9gkcEYJN7|d3TJ=~1M+j}UO68KCo^atAIKlX=7rwo zg)O?MSIP@Ljw<;%v^HqYmK0n@+cv(nr*oMW>Ls$lW}!k5%OLL~fCXaP2GU%0s#S_< zj0Qh|wZ{Ks=Ps<@g9;aoz)Rsp2-{{uzs-^??Tg`bKUYJAb!uvNpu(GDS(-qjS)vV< zqrx^_+mdV>Fccbxy^Qk`uVJS@vT3%-v;mH4Z-CeWMJ^>LY>sRLtQ^8GW|E1Ykfz3_ X*Kiu7Mcb?$w5x5l%eL8Wt;7BUHjb=V literal 0 HcmV?d00001 diff --git a/cloudcontainers/app/__pycache__/database.cpython-310.pyc b/cloudcontainers/app/__pycache__/database.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c3eff1f0b92e46a3551dbfbcf9bc60864c851dfb GIT binary patch literal 521 zcmYjNO-~y!5Vf-(S+*O*trGtrLW+@~Q5#h#p@299)HX$GeTf`aaunj>`HtfjLXSK_ndw0489CDZ%; z{=2ukZ-!EHCg<9^!QS3(pE$7Yq#OC1Eu7|BsnYq4hF{8so%?uJR-*gL=RuW8J_ofl z;UtJ||1b35m+P%rGf`;pn`;f)C=)kR?SIDT>&d6_X#C;y`0U&CX!K=tIGP+!FFucb z`m(JrCNF!98@oO}4BOr#(+MIg_%kFI7K|leN=}ZzUO8QpOJ*Ib%WIesF7-liT{#wR q7y4LTlO7SwvF32Sdg-(GN{fYr0~|!{R)7K(xWE~Xqb%OUdFwAJG?&2u literal 0 HcmV?d00001 diff --git a/cloudcontainers/app/__pycache__/main.cpython-310.pyc b/cloudcontainers/app/__pycache__/main.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13ab4db726320454a29f2c2fd3d8d672505e623d GIT binary patch literal 3886 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 literal 0 HcmV?d00001 diff --git a/app/__pycache__/schemas.cpython-310.pyc b/cloudcontainers/app/__pycache__/schemas.cpython-310.pyc similarity index 100% rename from app/__pycache__/schemas.cpython-310.pyc rename to cloudcontainers/app/__pycache__/schemas.cpython-310.pyc diff --git a/app/crud.py b/cloudcontainers/app/crud.py similarity index 98% rename from app/crud.py rename to cloudcontainers/app/crud.py index dd5b280..14b49bb 100644 --- a/app/crud.py +++ b/cloudcontainers/app/crud.py @@ -2,7 +2,7 @@ from sqlalchemy.orm import Session from sqlalchemy import select -import models, schemas +from . import models, schemas # 删除 diff --git a/cloudcontainers/app/database.py b/cloudcontainers/app/database.py new file mode 100644 index 0000000..ca4b3a5 --- /dev/null +++ b/cloudcontainers/app/database.py @@ -0,0 +1,15 @@ +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker +import pymysql + +# SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db" +# 从docker访问ip需要 mysql服务端允许外部访问=> 参考地址:https://blog.csdn.net/weixin_42599091/article/details/125224850 +SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:Xiao4669805@192.168.31.245:3306/test" + +# SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False} #sqlite + +engine = create_engine(SQLALCHEMY_DATABASE_URL) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + +Base = declarative_base() diff --git a/app/main.py b/cloudcontainers/app/main.py similarity index 82% rename from app/main.py rename to cloudcontainers/app/main.py index c0d002c..4c7e633 100644 --- a/app/main.py +++ b/cloudcontainers/app/main.py @@ -7,8 +7,8 @@ from pydantic import BaseModel from sqlalchemy.orm import Session -import crud, models, schemas -from database import SessionLocal, engine +from . import crud, models, schemas +from .database import SessionLocal, engine models.Base.metadata.create_all(bind=engine) @@ -73,6 +73,18 @@ async def root(): print('e') return {"message": "触发飞书webhook"} +# 飞书通知 +@app.post("/nihao") +async def root(): + headers = {'Content-Type': 'application/json'} + # https://open.feishu.cn/open-apis/bot/v2/hook/5fb1b44c-3446-42ef-9b3a-dd37731567dd + try: + r = requests.post('https://open.feishu.cn/open-apis/bot/v2/hook/5fb1b44c-3446-42ef-9b3a-dd37731567dd', + data=json.dumps({'msg_type': 'text', "content": {"text": "cityNew有新用户注册"}}), headers=headers) + except(e): + print('e') + return {"message": "nihao"} + # post请求 @app.post("/testPost") async def root(): diff --git a/app/models.py b/cloudcontainers/app/models.py similarity index 70% rename from app/models.py rename to cloudcontainers/app/models.py index 8da01c2..a9b59a4 100644 --- a/app/models.py +++ b/cloudcontainers/app/models.py @@ -1,15 +1,15 @@ from sqlalchemy import Boolean, Column, ForeignKey, Integer, String from sqlalchemy.orm import relationship -from database import Base +from .database import Base class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) - email = Column(String, unique=True, index=True) - hashed_password = Column(String) + email = Column(String(1000), unique=True, index=True) + hashed_password = Column(String(1000)) is_active = Column(Boolean, default=True) items = relationship("Item", back_populates="owner") @@ -19,8 +19,8 @@ class Item(Base): __tablename__ = "items" id = Column(Integer, primary_key=True, index=True) - title = Column(String, index=True) - description = Column(String, index=True) + title = Column(String(1000), index=True) + description = Column(String(1000), index=True) owner_id = Column(Integer, ForeignKey("users.id")) owner = relationship("User", back_populates="items") diff --git a/app/schemas.py b/cloudcontainers/app/schemas.py similarity index 100% rename from app/schemas.py rename to cloudcontainers/app/schemas.py diff --git a/app/sql_app.db b/cloudcontainers/app/sql_app.db similarity index 98% rename from app/sql_app.db rename to cloudcontainers/app/sql_app.db index a10c99d120d2ebf3e74896804e247c0efe5ce96a..60efca1b417beefd5595f6991c13faf1a034b438 100644 GIT binary patch delta 215 zcmZo@U}|V!njp<6I8nx#QE+3z5`F1EYwTR&n+$~%FIj8%P%QPP0Y!u%t$QGNKFxEV`UK31u8N^lbBp5-^Rzrf0BX! zI{!QVll)Kk?`;-P*v>D?%Ph|bHSrEu$n|x1SS(t%=fsOwj1OFfX5B#ry8omLw j2s)hNmt$pSWMpRtk*usBl7$6CGBblnHnz=w>{%QD(wR7h delta 138 zcmZo@U}|V!njp={KT*b+k$+>t5`I1w{yGN!d;CZEr}5YE*KJl*$l;${C*KAXzsJD; zj{gZz?i>HN&58!Q`33o3F$fwO8Jn0o6c*|w=jSp{zNfD&$p4Ljh5rcy{~!Jj{I7r- ko@^F$xWq5P%FM{f$_gS`SU@B*GXnzy8xzy!KlUsR0A)WWPXGV_ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..bdb192f --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,24 @@ +version: '3' +services: + app: + build: + context: . + dockerfile: Dockerfile.development + volumes: + - .:/code + ports: + - '27081:80' + container_name: wxcloud_fastapiweb + labels: + - wxPort=27083 + - hostPort=27081 + - wxcloud=fastapiweb + - role=container + environment: + - MYSQL_USERNAME= + - MYSQL_PASSWORD= + - MYSQL_ADDRESS= +networks: + default: + external: + name: wxcb0 diff --git a/requirements.txt b/requirements.txt index 9558a21..3f05668 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,18 +12,25 @@ cffi==1.15.0 charset-normalizer==2.0.12 click==8.1.3 cryptography==37.0.1 +databases==0.6.2 +distlib==0.3.6 dnspython==2.2.1 email-validator==1.1.3 fastapi==0.75.2 fastapi-crudrouter==0.8.5 -fastapi-users==9.3.1 -fastapi-users-db-sqlalchemy==3.0.1 +fastapi-users==10.2.1 +fastapi-users-db-sqlalchemy==4.0.3 +filelock==3.8.2 future==0.18.2 greenlet==1.1.2 grpclib==0.4.2 -h11==0.13.0 +h11==0.12.0 h2==4.1.0 hpack==4.0.0 +httpcore==0.14.7 +httptools==0.5.0 +httpx==0.22.0 +httpx-oauth==0.6.0 hypercorn==0.13.2 hyperframe==6.0.1 idna==3.3 @@ -39,6 +46,8 @@ opengraph-py3==0.71 passlib==1.7.4 pikachuwechat==0.1.2 ping3==4.0.3 +pipenv==2022.11.30 +platformdirs==2.6.0 prettytable==3.3.0 priority==2.0.0 pycodestyle==2.10.0 @@ -46,13 +55,18 @@ pycparser==2.21 pydantic==1.9.0 pyecharts==1.9.1 pyee==9.0.4 -PyJWT==2.3.0 +PyJWT==2.6.0 +PyMySQL==1.0.2 pypng==0.0.21 PyQRCode==1.2.1 +python-dotenv==0.21.0 python-multipart==0.0.5 +PyYAML==6.0 qrcode==7.3.1 quart==0.17.0 requests==2.27.1 +rfc3986==1.5.0 +schedule==1.1.0 simplejson==3.17.6 six==1.16.0 sniffio==1.2.0 @@ -65,6 +79,10 @@ tomli==2.0.1 typing_extensions==4.2.0 urllib3==1.26.9 uvicorn==0.17.6 +uvloop==0.17.0 +virtualenv==20.17.1 +virtualenv-clone==0.5.7 +watchgod==0.8.2 wcwidth==0.2.5 websockets==10.3 wechaty==0.8.39