๐ŸŒณ Pynecone ์‹œ์ž‘ํ•˜๊ธฐ (Python์œผ๋กœ ์›น์•ฑ ๋งŒ๋“ค๊ธฐ)

April 10, 20232 minutes

Pynecone ์‹œ์ž‘ํ•˜๊ธฐ

Pynecone์ด๋ž€? (๊ทธ๋ž˜๋„ React ์ข…๋ง์€…)

ํŠน์ง• (๊ณต์‹ ์‚ฌ์ดํŠธ https://pynecone.io/ ์—์„œ ๋งํ•˜๋Š”โ€ฆ)

  • Pure Python ์ƒˆ๋กœ์šด ์–ธ์–ด ๋ฐฐ์šธ ํ•„์š” ์—†์–ด์š” ํŒŒ์ด์ฌ์ด๋ž‘ ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ค„๋งŒ ์•Œ๋ฉด ๋ผ์š”
  • Easy to Learn
  • Full Flexibility ํ™•์žฅ์„ฑ ์ข‹์•„์š”
  • Batteries Included Pynecone ํ•˜๋‚˜๋กœ ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ, ๋ฐฐํฌ ๋‹ค ํ•  ์ˆ˜ ์žˆ์–ด์š”

  • Pynecone : Pure Python์œผ๋กœ interactive web app์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ (JavaScript, React, NextJS ๋ชฐ๋ผ๋„ ๋จ)
  • Styling์„ ์œ„ํ•ด Chakra UI๋ฅผ ์‚ฌ์šฉํ•จ
  • NextJS app๊ณผ FastAPI ์„œ๋ฒ„ ๊ฐ„์˜ ๋ชจ๋“  ํ†ต์‹  ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • AI์™€ ๊ฐ™์ด ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, FastAPI ๋ฐฑ์—”๋“œ ์‚ฌ์šฉํ•˜๋‹ˆ ์ข‹์„ ๋“ฏ
  • ๋…ธ๋งˆ๋“œ ์ฝ”๋”์™ˆ, ReactJS๊ฐ€ ์•„๋‹Œ Flutter์ฒ˜๋Ÿผ ๋А๊ปด์ ธ์„œ ์ข‹์•„
  • ๊ทธ๋ž˜๋„ ๊ทธ๋ƒฅ JS, React, NextJS ๋ฐฐ์šฐ์ž

Letโ€™s Started with Pynecone!

1. Pynecone Installiation

  • Python 3.7๋ฒ„์ „ ์ด์ƒ
  • NodeJS 12.22.0 ๋ฒ„์ „ ์ด์ƒ

Untitled

pip๋ฅผ ํ†ตํ•ด ์„ค์น˜

pip install pynecone-io

2. Create a Project

๋ชจ๋“  Pynecone function, class๋Š” pc. ์ ‘๋‘์‚ฌ๋กœ ์‹œ์ž‘!

pc init : Initialize a template app in new directory

Untitled 1

Untitled 2

์œ„์™€ ๊ฐ™์ด ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ์„ ์ƒ์„ฑํ•ด์คŒ

directory structure

MY_FIRST_PYNECONE_APP
โ”œโ”€โ”€ .web
โ”œโ”€โ”€ assets
โ”œโ”€โ”€ my_first_pynecone_app
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ””โ”€โ”€ my_first_pynecone_app.py
โ””โ”€โ”€ pcconfig.py
  1. .web NextJS ์•ฑ์œผ๋กœ ์ปดํŒŒ์ผ ๋‹ค์šด๋˜์–ด์„œ .web ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋จ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ์† ๋Œˆ ํ•„์š” ์—†์ง€๋งŒ, ๋””๋ฒ„๊น…์— ์œ ์šฉํ•จ ๊ฐ๊ฐ์˜ Pynecone ํŽ˜์ด์ง€๋Š” .js ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ๋˜์–ด์„œ .web/pages ๋””๋ ‰ํ„ฐ๋กœ๋ฆฌ์— ์ €์žฅ๋จ

  2. assets favicon , ํฐํŠธ, ์ด๋ฏธ์ง€ ๋“ฑ๊ณผ ๊ฐ™์€ asset๋“ค์€ ์ €์žฅํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ assets/image.png ๋กœ image๋ฅผ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ๋””์Šคํ”„๋ ˆ์ดํ•  ์ˆ˜ ์žˆ์Œ.

    pc.image(src="image.png")
  3. Main Project : {my_first_pynecone_app}/{my_first_pynecone_app.py} pc init ํ•˜๋ฉด, ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์ด๋ฆ„์˜ app (๋””๋ ‰ํ† ๋ฆฌ์ด๋ฆ„.py) ๋ฅผ ์ƒ์„ฑํ•ด์คŒ.

  4. Configuration : **pcconfig.py** app์— ๊ด€ํ•œ configuration ๊ด€ํ•œ ํŒŒ์ผ์ž„. ์•„๋ž˜์™€ ๊ฐ™์ด default๋กœ ์ƒ์„ฑ๋จ

    import pynecone as pc
    
    config = pc.Config(
        app_name="my_first_pynecone_app",
        db_url="sqlite:///pynecone.db",
        env=pc.Env.DEV,
    )

3. Run the app

pc run

Untitled 3

http://localhost:3000/

Untitled 4

4. The Structure of a Pynecone App

my_first__pynecone_app.py

"""Welcome to Pynecone! This file outlines the steps to create a basic app."""
from pcconfig import config

import pynecone as pc

docs_url = "https://pynecone.io/docs/getting-started/introduction"
filename = f"{config.app_name}/{config.app_name}.py"

# State๋Š” ๋ชจ๋“  variable๋“ค (**vars**)์„ ์ •์˜
class State(pc.State):
    """The app state."""

    pass

# Frontend
def index():
    return pc.center(
        pc.vstack(
            **pc.heading**("Welcome to Pynecone!", font_size="2em"),
            **pc.box**("Get started by editing ", pc.code(filename, font_size="1em")),
            **pc.link**(
                "Check out our docs!",
                href=docs_url,
                border="0.1em solid",
                padding="0.5em",
                border_radius="0.5em",
                _hover={
                    "color": "rgb(107,99,246)",
                },
            ),
            spacing="1.5em",
            font_size="2em",
        ),
        padding_top="10%",
    )

# Routing
# Add state and page to the app.
app = pc.App(state=State)
app.add_page(index)
# Compiling
app.compile()

pc.heading(), pc.box() pc.link() ๊ณผ ๊ฐ™์€ 50๊ฐœ ์ด์ƒ์˜ built-in components ์žˆ์Œ

ํ”„๋ก ํŠธ์—”๋“œ, ๋ฐฑ์—”๋“œ ๋ชจ๋‘ ํ•ด๊ฒฐํ•จ.

My first pynecone app

Untitled 5

Reference