====== Robyn - 高速、イノベーターフレンドリー、コミュニティ主導型の Python Web フレームワーク ====== 本家: [[https://robyn.tech/|Robyn - A Fast, Innovator Friendly, and Community Driven Python Web Framework.]]\\ ソースコード: [[git>sparckles/Robyn|sparckles/Robyn: Robyn is a Super Fast Async Python Web Framework with a Rust runtime.]]\\ ドキュメント: [[https://robyn.tech/documentation|Robyn API documentation]]\\ ===== プロジェクトの作成 ===== 公式: [[https://robyn.tech/documentation/example_app#installing-robyn|]]\\    [[https://robyn.tech/documentation/api_reference#installing-robyn|]]\\ 公式サンプル: [[git>sparckles/example_robyn_app|sparckles/example_robyn_app]]\\
$ mkdir -p robyn_proj && cd robyn_proj
$ python -m venv .venv && . .venv/bin/activate && pip install -U pip
Requirement already satisfied: pip in ./.venv/lib64/python3.12/site-packages (23.3.2)
Collecting pip
  Downloading pip-24.1-py3-none-any.whl.metadata (3.6 kB)
Downloading pip-24.1-py3-none-any.whl (1.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 8.7 MB/s eta 0:00:00
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 23.3.2
    Uninstalling pip-23.3.2:
      Successfully uninstalled pip-23.3.2
Successfully installed pip-24.1
(.venv) $ pip install robyn robyn[templating]
Collecting robyn
  Downloading robyn-0.56.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (8.6 kB)
Collecting watchdog==2.2.1 (from robyn)
  Downloading watchdog-2.2.1-py3-none-manylinux2014_x86_64.whl.metadata (34 kB)
Collecting multiprocess==0.70.14 (from robyn)
  Downloading multiprocess-0.70.14-py310-none-any.whl.metadata (6.6 kB)
Collecting nestd==0.3.1 (from robyn)
  Downloading nestd-0.3.1-py3-none-any.whl.metadata (3.4 kB)
Collecting inquirerpy==0.3.4 (from robyn)
  Downloading InquirerPy-0.3.4-py3-none-any.whl.metadata (8.1 kB)
Collecting rustimport==1.3.4 (from robyn)
  Downloading rustimport-1.3.4-py3-none-any.whl.metadata (13 kB)
Collecting orjson==3.9.15 (from robyn)
  Downloading orjson-3.9.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (49 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 49.5/49.5 kB 5.6 MB/s eta 0:00:00
Collecting uvloop~=0.19.0 (from robyn)
  Downloading uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)
Collecting pfzy<0.4.0,>=0.3.1 (from inquirerpy==0.3.4->robyn)
  Downloading pfzy-0.3.4-py3-none-any.whl.metadata (4.9 kB)
Collecting prompt-toolkit<4.0.0,>=3.0.1 (from inquirerpy==0.3.4->robyn)
  Downloading prompt_toolkit-3.0.47-py3-none-any.whl.metadata (6.4 kB)
Collecting dill>=0.3.6 (from multiprocess==0.70.14->robyn)
  Downloading dill-0.3.8-py3-none-any.whl.metadata (10 kB)
Collecting toml>=0.10.2 (from rustimport==1.3.4->robyn)
  Downloading toml-0.10.2-py2.py3-none-any.whl.metadata (7.1 kB)
Collecting jinja2==3.0.1 (from robyn[templating])
  Downloading Jinja2-3.0.1-py3-none-any.whl.metadata (3.5 kB)
Collecting MarkupSafe>=2.0 (from jinja2==3.0.1->robyn[templating])
  Downloading MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.0 kB)
Collecting wcwidth (from prompt-toolkit<4.0.0,>=3.0.1->inquirerpy==0.3.4->robyn)
  Downloading wcwidth-0.2.13-py2.py3-none-any.whl.metadata (14 kB)
Downloading robyn-0.56.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.3/2.3 MB 8.7 MB/s eta 0:00:00
Downloading InquirerPy-0.3.4-py3-none-any.whl (67 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 67.7/67.7 kB 9.1 MB/s eta 0:00:00
Downloading multiprocess-0.70.14-py310-none-any.whl (134 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.3/134.3 kB 10.3 MB/s eta 0:00:00
Downloading nestd-0.3.1-py3-none-any.whl (2.8 kB)
Downloading orjson-3.9.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (138 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 138.7/138.7 kB 10.1 MB/s eta 0:00:00
Downloading rustimport-1.3.4-py3-none-any.whl (26 kB)
Downloading watchdog-2.2.1-py3-none-manylinux2014_x86_64.whl (78 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 79.0/79.0 kB 10.8 MB/s eta 0:00:00
Downloading Jinja2-3.0.1-py3-none-any.whl (133 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.7/133.7 kB 11.1 MB/s eta 0:00:00
Downloading uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.2/4.2 MB 11.4 MB/s eta 0:00:00
Downloading dill-0.3.8-py3-none-any.whl (116 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 116.3/116.3 kB 9.0 MB/s eta 0:00:00
Downloading MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28 kB)
Downloading pfzy-0.3.4-py3-none-any.whl (8.5 kB)
Downloading prompt_toolkit-3.0.47-py3-none-any.whl (386 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 386.4/386.4 kB 10.3 MB/s eta 0:00:00
Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
Downloading wcwidth-0.2.13-py2.py3-none-any.whl (34 kB)
Installing collected packages: wcwidth, watchdog, uvloop, toml, prompt-toolkit, pfzy, orjson, nestd, MarkupSafe, dill, rustimport, multiprocess, jinja2, inquirerpy, robyn
Successfully installed MarkupSafe-2.1.5 dill-0.3.8 inquirerpy-0.3.4 jinja2-3.0.1 multiprocess-0.70.14 nestd-0.3.1 orjson-3.9.15 pfzy-0.3.4 prompt-toolkit-3.0.47 robyn-0.56.0 rustimport-1.3.4 toml-0.10.2 uvloop-0.19.0 watchdog-2.2.1 wcwidth-0.2.13
(.venv) $ python -m robyn --create
? Directory Path: .
? Need Docker? (Y/N) Y
? Please select project type (Mongo/Postgres/Sqlalchemy/Prisma):  Postgres
Creating a new Robyn project '/home/tomoyan/my_projects/robyn_proj'...
New Robyn project created in '/home/tomoyan/my_projects/robyn_proj'
(.venv) $ tree
.
├── Dockerfile
├── __pycache__
│   └── app.cpython-312.pyc
├── app.py
├── requirements.txt
└── supervisord.conf

2 directories, 5 files
(.venv) $ bat app.py
   1 import psycopg2
   2 from robyn import Robyn
   3 
   4 DB_NAME = "postgresDB"
   5 DB_HOST = "localhost"
   6 DB_USER = "postgres"
   7 DB_PASS = "password"
   8 DB_PORT = "5455"
   9 
  10 conn = psycopg2.connect(database=DB_NAME, host=DB_HOST, user=DB_USER, password=DB_PASS, port=DB_PORT)
  11 
  12 app = Robyn(__file__)
  13 
  14 
  15 # create a route to fetch all users
  16 @app.get("/users")
  17 def get_users():
  18     cursor = conn.cursor()
  19     cursor.execute("SELECT * FROM users")
  20     all_users = cursor.fetchall()
  21     return {"users": all_users}
  22 
  23 
  24 @app.get("/")
  25 def index():
  26     return "Hello World!"
  27 
  28 
  29 if __name__ == "__main__":
  30     app.start(url="0.0.0.0", port=8080)