committed by
GitHub
1 changed files with 846 additions and 0 deletions
@ -0,0 +1,846 @@ |
|||
# ๊ฐ์ ํ๊ฒฝ |
|||
|
|||
Python ํ๋ก์ ํธ๋ฅผ ์์
ํ ๋๋ **๊ฐ์ ํ๊ฒฝ** (๋๋ ์ด์ ์ ์ฌํ ๋๊ตฌ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ฐ ํ๋ก์ ํธ ๋ง๋ค ์ค์นํ๋ ํจํค์ง๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. |
|||
|
|||
/// info | ์ ๋ณด |
|||
|
|||
์ด๋ฏธ ๊ฐ์ ํ๊ฒฝ์ ๋ํด ์ ์๊ณ ์๋ค๋ฉด, ์ด ์น์
์ ๊ฑด๋ ๋ฐ์ด๋ ๊ด์ฐฎ์ต๋๋ค. ๐ค |
|||
|
|||
/// |
|||
|
|||
/// tip | ํ |
|||
|
|||
**๊ฐ์ ํ๊ฒฝ(Virtual Environment)** ์ **ํ๊ฒฝ ๋ณ์(Environment Variable)** ์ ๋ค๋ฆ
๋๋ค. |
|||
|
|||
**ํ๊ฒฝ ๋ณ์**๋ ์์คํ
์ ์กด์ฌํ๋ฉฐ, ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ์ ์๋ ๋ณ์์
๋๋ค. |
|||
|
|||
**๊ฐ์ ํ๊ฒฝ**์ ๋ช๋ช ํ์ผ๋ก ๊ตฌ์ฑ๋ ํ๋์ ๋๋ ํฐ๋ฆฌ์
๋๋ค. |
|||
|
|||
/// |
|||
|
|||
/// info | ์ ๋ณด |
|||
|
|||
์ด ํ์ด์ง์์๋ **๊ฐ์ ํ๊ฒฝ**์ ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ์๋ ๋ฐฉ์์ ์ค๋ช
ํฉ๋๋ค. |
|||
|
|||
๋ง์ฝ **๋ชจ๋ ๊ฒ์ ๊ด๋ฆฌํด์ฃผ๋ ๋๊ตฌ** (Python ์ค์น๊น์ง ํฌํจ)๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>๋ฅผ ์ฌ์ฉํด๋ณด์ธ์. |
|||
|
|||
/// |
|||
|
|||
## ํ๋ก์ ํธ ์์ฑ |
|||
|
|||
๋จผ์ , ํ๋ก์ ํธ๋ฅผ ์ํ ๋๋ ํฐ๋ฆฌ๋ฅผ ํ๋ ์์ฑํฉ๋๋ค. |
|||
|
|||
๋ณดํต ์ฌ์ฉ์ ํ ๋๋ ํฐ๋ฆฌ ์์ `code`๋ผ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์์ ํ๋ก์ ํธ๋ง๋ค ํ๋์ฉ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๊ด๋ฆฌํฉ๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// ํ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ |
|||
$ cd |
|||
// ๋ชจ๋ ์ฝ๋ ํ๋ก์ ํธ๋ฅผ ์ํ ๋๋ ํฐ๋ฆฌ ์์ฑ |
|||
$ mkdir code |
|||
// code ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ |
|||
$ cd code |
|||
// ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์ํ ๋๋ ํฐ๋ฆฌ ์์ฑ |
|||
$ mkdir awesome-project |
|||
// ํด๋น ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ |
|||
$ cd awesome-project |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ ์์ฑ |
|||
|
|||
Python ํ๋ก์ ํธ๋ฅผ **์ฒ์ ์์ํ ๋**, ๊ฐ์ ํ๊ฒฝ์ **<abbr title="๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๋ ์์ง๋ง, ์ด๊ฑด ๊ฐ๋จํ ๊ฐ์ด๋๋ผ์ธ์
๋๋ค">ํ๋ก์ ํธ ๋ด๋ถ</abbr>**์ ์์ฑํฉ๋๋ค. |
|||
|
|||
/// tip | ํ |
|||
|
|||
์ด ์์
์ **ํ๋ก์ ํธ๋ฅผ ์ฒ์ ์ค์ ํ ๋ ํ๋ฒ๋ง** ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์ดํ ์์
ํ ๋ ๋ฐ๋ณตํ ํ์๋ ์์ต๋๋ค. |
|||
|
|||
/// |
|||
|
|||
//// tab | `venv` |
|||
|
|||
Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋ venv ๋ชจ๋์ ์ฌ์ฉํด ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ ์ ์์ต๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ python -m venv .venv |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
/// details | ๋ช
๋ น์ด ์์ธ ์ค๋ช
|
|||
|
|||
* `python`: `python` ํ๋ก๊ทธ๋จ์ ์คํํฉ๋๋ค. |
|||
* `-m`: ํน์ ๋ชจ๋์ ์คํฌ๋ฆฝํธ์ฒ๋ผ ์คํํฉ๋๋ค. ๋์ ๋ชจ๋์ ๋ฐ๋ก ๋ค์ ์ง์ ํฉ๋๋ค. |
|||
* `venv`: Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋ `venv` ๋ชจ๋์ ์คํํฉ๋๋ค. |
|||
* `.venv`: ๊ฐ์ ํ๊ฒฝ์ `.venv` ๋๋ ํฐ๋ฆฌ์ ์์ฑํฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
//// |
|||
|
|||
//// tab | `uv` |
|||
|
|||
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๊ฐ ์ค์น๋์ด ์๋ค๋ฉด, uv๋ฅผ ํตํด ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ ์ ์์ต๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ uv venv |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
/// tip | ํ |
|||
|
|||
`uv`๋ ๊ธฐ๋ณธ์ ์ผ๋ก `.venv` ๋๋ ํฐ๋ฆฌ์ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํฉ๋๋ค. |
|||
|
|||
๋ณ๋๋ก ๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ ์ถ๊ฐ ์ธ์๋ก ๋๊ฒจ ์ฃผ๋ฉด ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. |
|||
|
|||
/// |
|||
|
|||
//// |
|||
|
|||
ํด๋น ๋ช
๋ น์ด๋ `.venv` ๋๋ ํฐ๋ฆฌ์ ์๋ก์ด ๊ฐ์ ํ๊ฒฝ์ ์์ฑํฉ๋๋ค. |
|||
|
|||
/// details | `.venv` ๋๋ ๋ค๋ฅธ ์ด๋ฆ |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ์ ์์ฑํ ์๋ ์์ง๋ง, ๊ด๋ก์ ์ผ๋ก `.venv` ๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ ํ์ฑํ |
|||
|
|||
์ดํ ์คํํ๋ Python ๋ช
๋ น์ด์ ํจํค์ง ์ค์น๊ฐ ๊ฐ์ ํ๊ฒฝ์ ๋ฐ๋ฅด๋๋ก, ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ์ธ์. |
|||
|
|||
/// tip | ํ |
|||
|
|||
**ํฐ๋ฏธ๋์ ์๋ก ์ด๊ณ ** ํ๋ก์ ํธ ์์
์ ์์ํ ๋๋, **ํญ์ ์ด ์์
์** ํด์ฃผ์ธ์. |
|||
|
|||
/// |
|||
|
|||
//// tab | Linux, macOS |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ source .venv/bin/activate |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows PowerShell |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ .venv\Scripts\Activate.ps1 |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows Bash |
|||
|
|||
Windows์์ Bash(์: <a href="https://gitforwindows.org/" class="external-link" target="_blank">Git Bash</a>)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ source .venv/Scripts/activate |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
/// tip | ํ |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ์๋ก์ด ํจํค์ง๋ฅผ ์ค์นํ ๋๋ง๋ค, ํด๋น ํ๊ฒฝ์ ๋ค์ ํ์ฑํํ์ธ์. |
|||
|
|||
์ด๋ ๊ฒ ํ๋ฉด ํด๋น ํจํค์ง๋ก ์ค์น๋ **ํฐ๋ฏธ๋(<abbr title="command line interface">CLI</abbr>) ํ๋ก๊ทธ๋จ**์ ์ฌ์ฉํ ๋, ์ ์ญ์ ์ค์น๋ ๋ค๋ฅธ ๋ฒ์ ์ด ์๋๋ผ, ๊ฐ์ ํ๊ฒฝ ์์ ์ค์น๋ ์ ํํ ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ ์ฌ๋ถ ํ์ธ |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ๋์๋์ง ํ์ธํฉ๋๋ค. (์ด์ ๋ช
๋ น์ด๊ฐ ์ ๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๋ค). |
|||
|
|||
/// tip | ํ |
|||
|
|||
์ด ๋จ๊ณ๋ **์ ํ ์ฌํญ**์ด์ง๋ง, ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์๋ํ ๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ ๋์๋ ์ง **ํ์ธ**ํ๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค. |
|||
|
|||
/// |
|||
|
|||
//// tab | Linux, macOS, Windows Bash |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ which python |
|||
|
|||
/home/user/code/awesome-project/.venv/bin/python |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
`python` ์์น๊ฐ ํ๋ก์ ํธ ๋ด๋ถ(์ด ์์์์๋ `awesome-project`)์ `.venv/bin/python` ๊ฒฝ๋ก๋ก ํ์๋๋ค๋ฉด ์ฑ๊ณต์
๋๋ค. ๐ |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows PowerShell |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ Get-Command python |
|||
|
|||
C:\Users\user\code\awesome-project\.venv\Scripts\python |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
`python` ์์น๊ฐ ํ๋ก์ ํธ ๋ด๋ถ(์ด ์์์์๋ `awesome-project`)์ `.venv\bin\python` ๊ฒฝ๋ก๋ก ํ์๋๋ค๋ฉด ์ฑ๊ณต์
๋๋ค. ๐ |
|||
|
|||
//// |
|||
|
|||
## pip ์
๊ทธ๋ ์ด๋ |
|||
|
|||
/// tip | ํ |
|||
|
|||
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, `pip` ๋์ `uv`๋ก ํจํค์ง๋ฅผ ์ค์นํ๊ฒ ๋๋ฏ๋ก `pip`์ ์
๊ทธ๋ ์ด๋ํ ํ์๊ฐ ์์ต๋๋ค. ๐ |
|||
|
|||
/// |
|||
|
|||
`pip`์ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ์ค์นํ๋ ๊ฒฝ์ฐ (Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจ๋์ด ์์ต๋๋ค), **์ต์ ๋ฒ์ ์ผ๋ก ์
๊ทธ๋ ์ด๋**ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. |
|||
|
|||
ํจํค์ง ์ค์น ์ค ๋ฐ์ํ๋ ๋ค์ํ๊ณ ํน์ดํ ์๋ฌ๋ค์ `pip` ์
๊ทธ๋ ์ด๋๋ก ์ฝ๊ฒ ํด๊ฒฐ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. |
|||
|
|||
/// tip | ํ |
|||
|
|||
์ด ์์
์ ๋ณดํต ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ **์งํ ํ ๋ฒ๋ง** ํ๋ฉด ๋ฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ๋ ์ํ์ธ์ง ํ์ธํ ํ(์์ ์ค๋ช
ํ ๋ช
๋ น์ด ์ฌ์ฉ), ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ์ธ์: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ python -m pip install --upgrade pip |
|||
|
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
## `.gitignore` ์ถ๊ฐํ๊ธฐ |
|||
|
|||
**Git**์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด (์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค), `.gitignore` ํ์ผ์ ์ถ๊ฐํด์ `.venv` ๋๋ ํฐ๋ฆฌ ์ ์ฒด๋ฅผ Git์์ ์ ์ธํ์ธ์. |
|||
|
|||
/// tip | ํ |
|||
|
|||
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๋ฅผ ์ฌ์ฉํด ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๋ค๋ฉด, ์ด๋ฏธ ์ด ์์
์ด ์๋์ผ๋ก ์ฒ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก ์ด ๋จ๊ณ๋ ๊ฑด๋๋ฐ์ด๋ ๋ฉ๋๋ค. ๐ |
|||
|
|||
/// |
|||
|
|||
/// tip | ํ |
|||
|
|||
์ด ์์
๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ **์งํ ํ ๋ฒ๋ง** ํ๋ฉด ๋ฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ echo "*" > .venv/.gitignore |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
/// details | ๋ช
๋ น์ด ์์ธ ์ค๋ช
|
|||
|
|||
* `echo "*"`: ํฐ๋ฏธ๋์ `*` ํ
์คํธ๋ฅผ "์ถ๋ ฅ"ํฉ๋๋ค (๋ค์ ์ค๋ช
์์ ์กฐ๊ธ ๋ฐ๋๋๋ค) |
|||
* `>`: ์ผ์ชฝ ๋ช
๋ น์ด์ ์ถ๋ ฅ ๋ด์ฉ์ ํฐ๋ฏธ๋์ ์ถ๋ ฅํ์ง ์๊ณ , ์ค๋ฅธ์ชฝ์ ์ง์ ๋ ํ์ผ๋ก **๊ธฐ๋ก(write)** ํ๋ผ๋ ์๋ฏธ์
๋๋ค. |
|||
* `.gitignore`: ์ถ๋ ฅ๋ ํ
์คํธ๊ฐ ๊ธฐ๋ก๋ ํ์ผ ์ด๋ฆ์
๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ Git์์ `*`๋ "๋ชจ๋ ๊ฒ"์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ `.venv` ๋๋ ํฐ๋ฆฌ ์์ ๋ชจ๋ ๊ฒ์ ๋ฌด์ํ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
์ด ๋ช
๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ๊ฐ์ง `.gitignore` ํ์ผ์ ์์ฑํฉ๋๋ค: |
|||
|
|||
|
|||
```gitignore |
|||
* |
|||
``` |
|||
|
|||
/// |
|||
|
|||
## ํจํค์ง ์ค์น |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ ํ, ๊ทธ ์์ ํ์ํ ํจํค์ง๋ค์ ์ค์นํ ์ ์์ต๋๋ค. |
|||
|
|||
/// tip | ํ |
|||
|
|||
ํ๋ก์ ํธ์์ ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๊ฑฐ๋ ์
๊ทธ๋ ์ด๋ํ ๋๋ ์ด ์์
์ **ํ ๋ฒ๋ง** ํ๋ฉด ๋ฉ๋๋ค. |
|||
|
|||
๋ง์ฝ ํน์ ํจํค์ง์ ๋ฒ์ ์ ์
๊ทธ๋ ์ด๋ํ๊ฑฐ๋, ์๋ก์ด ํจํค์ง๋ฅผ ์ถ๊ฐํ ํ์๊ฐ ์๊ธฐ๋ฉด **๋ค์ ์ด ์์
์ ๋ฐ๋ณต**ํ๋ฉด ๋ฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
### ํจํค์ง ์ง์ ์ค์น |
|||
|
|||
๊ธํ๊ฒ ์์
ํ๊ฑฐ๋, ํ๋ก์ ํธ์ ํ์ํ ํจํค์ง ๋ชฉ๋ก์ ๋ฐ๋ก ํ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ, ํจํค์ง๋ฅผ ์ง์ ์ค์นํ ์๋ ์์ต๋๋ค. |
|||
|
|||
/// tip | ํ |
|||
|
|||
ํจํค์ง ์ด๋ฆ๊ณผ ๋ฒ์ ์ ๋ณด๋ฅผ ํ์ผ์ ์ ๋ฆฌํด๋๋ ๊ฒ(์: `requirements.txt` ๋๋ `pyproject.toml`)์ (๋งค์ฐ) ์ข์ ์๊ฐ์
๋๋ค. |
|||
|
|||
/// |
|||
|
|||
//// tab | `pip` |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ pip install "fastapi[standard]" |
|||
|
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | `uv` |
|||
|
|||
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ uv pip install "fastapi[standard]" |
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
### `requirements.txt`์์ ์ค์น |
|||
|
|||
`requirements.txt` ํ์ผ์ด ์๋ค๋ฉด, ๊ทธ ์์ ๋ช
์๋ ํจํค์ง๋ค์ ํ ๋ฒ์ ์ค์นํ ์ ์์ต๋๋ค. |
|||
|
|||
//// tab | `pip` |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ pip install -r requirements.txt |
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | `uv` |
|||
|
|||
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ uv pip install -r requirements.txt |
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
/// details | `requirements.txt` |
|||
|
|||
๋ค์์ ๋ช ๊ฐ์ง ํจํค์ง๋ฅผ ํฌํจํ `requirements.txt`์ ์์์
๋๋ค: |
|||
|
|||
```requirements.txt |
|||
fastapi[standard]==0.113.0 |
|||
pydantic==2.8.0 |
|||
``` |
|||
|
|||
/// |
|||
|
|||
## ํ๋ก๊ทธ๋จ ์คํ |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ ํ์๋ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค. ์ด๋ ํด๋น ๊ฐ์ ํ๊ฒฝ์ ์ค์น๋ Python๊ณผ ํจํค์ง๋ค์ด ์ฌ์ฉ๋ฉ๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ python main.py |
|||
|
|||
Hello World |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
## ์๋ํฐ ์ค์ |
|||
|
|||
์๋ํฐ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์์ ๋ง๋ ๊ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ๋๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. (๋๋ถ๋ถ์ ์๋ํฐ๋ ์๋์ผ๋ก ๊ฐ์งํ๊ธฐ๋ ํฉ๋๋ค.) |
|||
์ด๋ ๊ฒ ํ๋ฉด ์๋ ์์ฑ ๊ธฐ๋ฅ์ด๋ ์ฝ๋ ๋ด ์ค๋ฅ ํ์ ๊ธฐ๋ฅ์ ์ ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
์์: |
|||
|
|||
* <a href="https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment" class="external-link" target="_blank">VS Code</a> |
|||
* <a href="https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html" class="external-link" target="_blank">PyCharm</a> |
|||
|
|||
/// tip | ํ |
|||
|
|||
์ด ์ค์ ์ ๋ณดํต ๊ฐ์ ํ๊ฒฝ์ **์ฒ์ ๋ง๋ค์์ ๋ ํ ๋ฒ๋ง** ํด์ฃผ๋ฉด ๋ฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ ๋นํ์ฑํ |
|||
|
|||
ํ๋ก์ ํธ ์์
์ด ๋๋ฌ๋ค๋ฉด, ๊ฐ์ ํ๊ฒฝ์ **๋นํ์ฑํ**ํ ์ ์์ต๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ deactivate |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
์ด๋ ๊ฒ ํ๋ฉด ์ดํ์ `python` ๋ช
๋ น์ด๋ฅผ ์คํํ์ ๋, ๊ฐ์ ํ๊ฒฝ์ Python์ด๋ ๊ทธ ์์ ์ค์น๋ ํจํค์ง๋ค์ ์ฌ์ฉํ์ง ์๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
## ์ด์ ์์
ํ ์ค๋น๊ฐ ๋์์ต๋๋ค |
|||
|
|||
์ด์ ํ๋ก์ ํธ ์์
์ ์์ํ ์ค๋น๊ฐ ์๋ฃ๋์์ต๋๋ค. |
|||
|
|||
|
|||
/// tip | ํ |
|||
|
|||
์ ๋ด์ฉ์ ๋ ๊น์ด ์ดํดํ๊ณ ์ถ์ผ์ ๊ฐ์? |
|||
|
|||
๊ทธ๋ ๋ค๋ฉด ๊ณ์ ์ฝ์ด ์ฃผ์ธ์. ๐๐ค |
|||
|
|||
/// |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ์ ์ ์ฌ์ฉํ๋๊ฐ |
|||
|
|||
FastAPI๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ <a href="https://www.python.org/" class="external-link" target="_blank">Python</a>์ ์ค์นํด์ผ ํฉ๋๋ค. |
|||
|
|||
๊ทธ ํ์๋ FastAPI์ ํจ๊ป ์ฌ์ฉํ **๊ธฐํ ํจํค์ง๋ค**์ **์ค์น**ํด์ผ ํฉ๋๋ค. |
|||
|
|||
ํจํค์ง๋ฅผ ์ค์นํ ๋ ๋ณดํต Python์ ๊ธฐ๋ณธ ํฌํจ๋ `pip` ๋ช
๋ น์ด(๋๋ ์ ์ฌํ ๋๊ตฌ)๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
|||
|
|||
ํ์ง๋ง `pip`์ ๊ทธ๋ฅ ์ง์ ์ฌ์ฉํ๋ฉด, ํด๋น ํจํค์ง๋ค์ **์ ์ญ Python ํ๊ฒฝ**(์์คํ
์ ์ฒด์ ์ค์น๋ Python)์ ์ค์น๋ฉ๋๋ค. |
|||
|
|||
### ๋ฌธ์ ์ |
|||
|
|||
๊ทธ๋ ๋ค๋ฉด, ์ ์ญ Python ํ๊ฒฝ์ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น์? |
|||
|
|||
์ด๋ ์์ ์ด ๋๋ฉด, **์๋ก ๋ค๋ฅธ ํจํค์ง๋ค**์ ์์กดํ๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ฒ ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์ค ์ผ๋ถ๋ **๊ฐ์ ํจํค์ง์ ์๋ก ๋ค๋ฅธ ๋ฒ์ **์ ํ์๋ก ํ ์ ์์ต๋๋ค. ๐ฑ |
|||
|
|||
์๋ฅผ ๋ค์ด, `๋ง๋ฒ์ฌ์ ๋(philosophers-stone)` ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค. ์ด ํ๋ก๊ทธ๋จ์ `ํด๋ฆฌ ํฌํฐ(harry)`๋ผ๋ ํจํค์ง์ `v1` ๋ฒ์ ์ **์์กด**ํฉ๋๋ค. ๋ฐ๋ผ์ `harry`๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. |
|||
|
|||
```mermaid |
|||
flowchart LR |
|||
stone(philosophers-stone) -->|requires| harry-1[harry v1] |
|||
``` |
|||
|
|||
๊ทธ๋ฐ๋ฐ ๋์ค์ `์์ฆ์นด๋ฐ์ ์ฃ์(prisoner-of-azkaban)`์ด๋ผ๋ ๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ฒ ๋์๊ณ , ์ด ํ๋ก์ ํธ๋ ์ญ์ `harry` ํจํค์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ํ๋ก์ ํธ๋ `harry`์ `v3` ๋ฒ์ ์ด ํ์ํฉ๋๋ค. |
|||
|
|||
```mermaid |
|||
flowchart LR |
|||
azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3] |
|||
``` |
|||
|
|||
ํ์ง๋ง ์ด์ ๋ฌธ์ ๊ฐ ์๊น๋๋ค. ๋ก์ปฌ ๊ฐ์ ํ๊ฒฝ ๋์ ์ ์ ์ญ ํ๊ฒฝ์ ํจํค์ง๋ฅผ ์ค์นํ๊ฒ ๋๋ฉด, ์ด๋ค ๋ฒ์ ์ `harry`๋ฅผ ์ค์นํ ์ง๋ฅผ ์ ํํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. |
|||
|
|||
์๋ฅผ ๋ค์ด, `๋ง๋ฒ์ฌ์ ๋(philosophers-stone)`์ ์คํํ๊ณ ์ถ๋ค๋ฉด ๋จผ์ `harry` `v1` ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ด ์ค์น ํด์ผ ํฉ๋๋ค: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ pip install "harry==1" |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
๊ทธ๋ฌ๋ฉด ๊ฒฐ๊ตญ ์ ์ญ Python ํ๊ฒฝ์๋ `harry` `v1`๋ฒ์ ์ด ์ค์น๋ ์ํ๊ฐ ๋ฉ๋๋ค. |
|||
|
|||
```mermaid |
|||
flowchart LR |
|||
subgraph global[global env] |
|||
harry-1[harry v1] |
|||
end |
|||
subgraph stone-project[philosophers-stone project] |
|||
stone(philosophers-stone) -->|requires| harry-1 |
|||
end |
|||
``` |
|||
|
|||
ํ์ง๋ง ์ด์ `์์ฆ์นด๋ฐ์ ์ฃ์(prisoner-of-azkaban)`์ ์คํํ๊ณ ์ถ๋ค๋ฉด, `harry` `v1`๋ฒ์ ์ ์ ๊ฑฐํ๊ณ `harry` `v3`๋ฒ์ ์ ์ค์นํด์ผ ํฉ๋๋ค. (๋๋ ๋จ์ํ `v3`๋ฒ์ ์ ์ค์นํ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ธฐ์กด์ `v1`๋ฒ์ ์ด ์๋์ผ๋ก ์ ๊ฑฐ๋ฉ๋๋ค.) |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ pip install "harry==3" |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
๊ทธ๋ ๊ฒ ํ๋ฉด ์ด์ ์ ์ญ Python ํ๊ฒฝ์๋ `harry` `v3`๋ฒ์ ์ด ์ค์น๋ ์ํ๊ฐ ๋ฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ๋ค์ `๋ง๋ฒ์ฌ์ ๋(philosophers-stone)`์ ์คํํ๋ ค๊ณ ํ๋ฉด, **์๋ํ์ง** ์์ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ์ด ํ๋ก๊ทธ๋จ์ `harry` `v1`๋ฒ์ ์ ํ์๋ก ํ๊ธฐ ๋๋ฌธ์
๋๋ค. |
|||
|
|||
```mermaid |
|||
flowchart LR |
|||
subgraph global[global env] |
|||
harry-1[<strike>harry v1</strike>] |
|||
style harry-1 fill:#ccc,stroke-dasharray: 5 5 |
|||
harry-3[harry v3] |
|||
end |
|||
subgraph stone-project[philosophers-stone project] |
|||
stone(philosophers-stone) -.-x|โ๏ธ| harry-1 |
|||
end |
|||
subgraph azkaban-project[prisoner-of-azkaban project] |
|||
azkaban(prisoner-of-azkaban) --> |requires| harry-3 |
|||
end |
|||
``` |
|||
|
|||
/// tip | ํ |
|||
|
|||
Python ํจํค์ง๋ค์ **์ ๋ฒ์ **์์ **ํธํ์ฑ ๋ฌธ์ (breaking changes)**๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ต๋ํ ๋
ธ๋ ฅํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค. ํ์ง๋ง ๊ทธ๋๋ ์์ ํ๊ฒ ์์
ํ๋ ค๋ฉด, ํ
์คํธ๋ฅผ ์คํํด๋ณด๋ฉด์ ์ ๋ฒ์ ์ ์๋์ ์ผ๋ก ์ค์นํ๋ ๊ฒ์ด ์ข์ต๋๋ค. |
|||
|
|||
/// |
|||
|
|||
์ด์ , ์ด๋ฐ ์ผ์ด ์ฌ๋ฌ๋ถ์ **๋ชจ๋ ํ๋ก์ ํธ**๊ฐ ์ฌ์ฉํ๋ **์๋ง์ ํจํค์ง๋ค**์์ ๋์์ ๋ฐ์ํ๋ค๊ณ ์์ํด๋ณด์ธ์. ์ด๋ ๋งค์ฐ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ, ๊ฒฐ๊ตญ **์๋ก ํธํ๋์ง ์๋ ๋ฒ์ **์ ํจํค์ง๋ก ํ๋ก์ ํธ๋ฅผ ์คํํ๊ฒ ๋ ๊ฐ๋ฅ์ฑ์ด ๋๊ณ , ๊ทธ๋ก ์ธํด ์ด๋ค ๋ฌธ์ ๊ฐ ์ ๋ฐ์ํ๋์ง ์ ์ ์๊ฒ ๋ ์ ์์ต๋๋ค. |
|||
|
|||
๋ํ ์ฌ์ฉํ๋ ์ด์์ฒด์ (Linux, Windows, macOS ๋ฑ)์ ๋ฐ๋ผ Python์ด **๋ฏธ๋ฆฌ ์ค์น๋์ด ์์ ์๋** ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ด์์ฒด์ ์ ๋์์ ํ์ํ ํน์ ๋ฒ์ ์ ํจํค์ง๋ค์ด ํจ๊ป ์ค์น๋์ด ์์ ์ ์์ต๋๋ค. ์ด ์ํ์์ ์ ์ญ Python ํ๊ฒฝ์ ์์์ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด, ์ด์์ฒด์ ์ ํฌํจ๋ ํ๋ก๊ทธ๋จ ์ผ๋ถ๊ฐ **๊นจ์ง ์ํ**๋ ์์ต๋๋ค. |
|||
|
|||
## ํจํค์ง๋ค์ ์ด๋์ ์ค์น๋๋๊ฐ |
|||
|
|||
Python์ ์ค์นํ๋ฉด, ์ปดํจํฐ์ ์ฌ๋ฌ ๋๋ ํฐ๋ฆฌ์ ํ์ผ๋ค์ด ์์ฑ๋ฉ๋๋ค. |
|||
|
|||
์ด ์ค ์ผ๋ถ ๋๋ ํฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์ค์นํ ํจํค์ง๋ค์ ๋ณด๊ดํ๋ ์ญํ ์ ํฉ๋๋ค. |
|||
|
|||
์๋ฅผ ๋ค์ด, ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// ์ง๊ธ ์คํํ์ง ์์๋ ๋ฉ๋๋ค, ๊ทธ๋ฅ ์์ ์ผ ๋ฟ์ด์์ ๐ค |
|||
$ pip install "fastapi[standard]" |
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
ํด๋น ๋ช
๋ น์ด๋ FastAPI ์ฝ๋๋ฅผ ํฌํจํ ์์ถ ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ด ํ์ผ์ ๋ณดํต <a href="https://pypi.org/project/fastapi/" class="external-link" target="_blank">PyPI</a>์์ ๋ฐ์์ต๋๋ค. |
|||
|
|||
๋ํ FastAPI๊ฐ ์์กดํ๋ ๋ค๋ฅธ ํจํค์ง๋ค๋ ํจ๊ป **๋ค์ด๋ก๋**๋ฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ชจ๋ ํ์ผ๋ค์ **์์ถ ํด์ **ํ ๋ค, ์ปดํจํฐ์ ํน์ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅํฉ๋๋ค. |
|||
|
|||
๊ธฐ๋ณธ์ ์ผ๋ก ์ด ํ์ผ๋ค์ Python์ด ์ค์น๋ ๋๋ ํฐ๋ฆฌ ์, ์ฆ **์ ์ญ ํ๊ฒฝ**์ ๋ด์ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ์ด๋ |
|||
|
|||
์ ์ญ ํ๊ฒฝ์ ๋ชจ๋ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ
์, ์์
ํ๋ **๊ฐ ํ๋ก์ ํธ๋ง๋ค ๊ฐ์ ํ๊ฒฝ**์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ์ ์ญ ํ๊ฒฝ๊ณผ ๋งค์ฐ ์ ์ฌํ ํ๋์ **๋๋ ํฐ๋ฆฌ**์ด๋ฉฐ, ๊ทธ ์์ ํด๋น ํ๋ก์ ํธ๋ฅผ ์ํ ํจํค์ง๋ค์ ์ค์นํ ์ ์์ต๋๋ค. |
|||
|
|||
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ํ๋ก์ ํธ๋ ์์ฒด์ ์ธ ๊ฐ์ ํ๊ฒฝ(`.venv` ๋๋ ํฐ๋ฆฌ)์ ๊ฐ์ง๊ฒ ๋๋ฉฐ, ๊ทธ ์์ ํด๋น ํ๋ก์ ํธ ์ ์ฉ ํจํค์ง๋ค์ ๋ณด์ ํ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
|
|||
```mermaid |
|||
flowchart TB |
|||
subgraph stone-project[philosophers-stone project] |
|||
stone(philosophers-stone) --->|requires| harry-1 |
|||
subgraph venv1[.venv] |
|||
harry-1[harry v1] |
|||
end |
|||
end |
|||
subgraph azkaban-project[prisoner-of-azkaban project] |
|||
azkaban(prisoner-of-azkaban) --->|requires| harry-3 |
|||
subgraph venv2[.venv] |
|||
harry-3[harry v3] |
|||
end |
|||
end |
|||
stone-project ~~~ azkaban-project |
|||
``` |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ ํ์ฑํ ์๋ฏธ |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ๋ค๋ ๊ฒ์, ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค: |
|||
|
|||
//// tab | Linux, macOS |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ source .venv/bin/activate |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows PowerShell |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ .venv\Scripts\Activate.ps1 |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows Bash |
|||
|
|||
Windows์์ Bash(์: <a href="https://gitforwindows.org/" class="external-link" target="_blank">Git Bash</a>)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ source .venv/Scripts/activate |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
์ด ๋ช
๋ น์ด๋ ์ดํ์ ์คํ๋ ๋ช
๋ น์ด์์ ์ฌ์ฉ๋ [ํ๊ฒฝ ๋ณ์](environment-variables.md){.internal-link target=_blank} ๋ช ๊ฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ์์ ํฉ๋๋ค. |
|||
|
|||
์ด ๋ณ์๋ค ์ค ํ๋๊ฐ ๋ฐ๋ก `PATH` ๋ณ์์
๋๋ค. |
|||
|
|||
/// tip | ํ |
|||
|
|||
`PATH` ํ๊ฒฝ ๋ณ์์ ๋ํด ๋ ์๊ณ ์ถ๋ค๋ฉด [ํ๊ฒฝ ๋ณ์ ๋ฌธ์์ PATH ํ๊ฒฝ ๋ณ์ ์น์
](environment-variables.md#path-environment-variable){.internal-link target=_blank}์ ์ฐธ๊ณ ํ์ธ์. |
|||
|
|||
/// |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ๋ฉด, ๊ฐ์ ํ๊ฒฝ์ ๊ฒฝ๋ก์ธ `.venv/bin` (Linux์ macOS) ๋๋ `.venv\Scripts`(Windows)๋ฅผ `PATH` ํ๊ฒฝ ๋ณ์์ ์ถ๊ฐ๋ฉ๋๋ค. |
|||
|
|||
์๋ฅผ ๋ค์ด, ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ๊ธฐ ์ ์ `PATH` ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค: |
|||
|
|||
//// tab | Linux, macOS |
|||
|
|||
```plaintext |
|||
/usr/bin:/bin:/usr/sbin:/sbin |
|||
``` |
|||
|
|||
์์คํ
์ ๋ค์ ๊ฒฝ๋ก๋ค์์ ํ๋ก๊ทธ๋จ์ ์ฐพ๊ฒ ๋ฉ๋๋ค: |
|||
|
|||
* `/usr/bin` |
|||
* `/bin` |
|||
* `/usr/sbin` |
|||
* `/sbin` |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows |
|||
|
|||
```plaintext |
|||
C:\Windows\System32 |
|||
``` |
|||
|
|||
์์คํ
์ ๋ค์ ๊ฒฝ๋ก๋ค์์ ํ๋ก๊ทธ๋จ์ ์ฐพ๊ฒ ๋ฉ๋๋ค: |
|||
|
|||
* `C:\Windows\System32` |
|||
|
|||
//// |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ ํ์๋, `PATH` ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ ํํ๊ฐ ๋ฉ๋๋ค: |
|||
|
|||
//// tab | Linux, macOS |
|||
|
|||
```plaintext |
|||
/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin |
|||
``` |
|||
|
|||
์์คํ
์ ๊ฐ์ฅ ๋จผ์ ๋ค์ ๊ฒฝ๋ก์์ ํ๋ก๊ทธ๋จ์ ์ฐพ๊ธฐ ์์ํฉ๋๋ค: |
|||
|
|||
```plaintext |
|||
/home/user/code/awesome-project/.venv/bin |
|||
``` |
|||
|
|||
๊ทธ ํ์ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ค์ ํ์ํฉ๋๋ค. |
|||
|
|||
๋ฐ๋ผ์ ํฐ๋ฏธ๋์ `python`์ ์
๋ ฅํ๋ฉด, ์์คํ
์ ๋ค์ ์์น์ ์๋ Python ํ๋ก๊ทธ๋จ์ ์ฐพ๊ฒ ๋ฉ๋๋ค: |
|||
|
|||
```plaintext |
|||
/home/user/code/awesome-project/.venv/bin/python |
|||
``` |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ํด๋น Python์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows |
|||
|
|||
```plaintext |
|||
C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32 |
|||
``` |
|||
|
|||
์์คํ
์ ๊ฐ์ฅ ๋จผ์ ๋ค์ ๊ฒฝ๋ก์์ ํ๋ก๊ทธ๋จ์ ์ฐพ๊ธฐ ์์ํฉ๋๋ค: |
|||
|
|||
```plaintext |
|||
C:\Users\user\code\awesome-project\.venv\Scripts |
|||
``` |
|||
|
|||
๊ทธ ํ์ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ค์ ํ์ํฉ๋๋ค. |
|||
|
|||
๋ฐ๋ผ์ ํฐ๋ฏธ๋์ `python`์ ์
๋ ฅํ๋ฉด, ์์คํ
์ ๋ค์ ๊ฒฝ๋ก์ ์๋ Python ํ๋ก๊ทธ๋จ์ ์ฐพ๊ฒ ๋ฉ๋๋ค: |
|||
|
|||
```plaintext |
|||
C:\Users\user\code\awesome-project\.venv\Scripts\python |
|||
``` |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ํด๋น Python์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
//// |
|||
|
|||
์ค์ํ ์ธ๋ถ ์ฌํญ ์ค ํ๋๋, ๊ฐ์ ํ๊ฒฝ์ ๊ฒฝ๋ก๊ฐ `PATH` ๋ณ์์ ๊ฐ์ฅ **์**์ ์ถ๊ฐ๋๋ค๋ ์ ์
๋๋ค. ์์คํ
์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ค๋ฅธ Python๋ค๋ณด๋ค **๋จผ์ ** ์ด ๊ฒฝ๋ก๋ฅผ ์ฐพ์ต๋๋ค. ๊ทธ๋์ ํฐ๋ฏธ๋์์ `python`์ ์คํํ๋ฉด, ์ ์ญ ํ๊ฒฝ์ Python์ด ์๋ **๊ฐ์ ํ๊ฒฝ์ ์๋** Python์ด ์ฌ์ฉ๋ฉ๋๋ค. (์: ์ ์ญ ํ๊ฒฝ์ ์ค์น๋ `python`์ด ์๋๋ผ๋ ๊ทธ๋ณด๋ค ์ฐ์ ํฉ๋๋ค.) |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ๋ฉด ์ด ์ธ์๋ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๊ฒ๋ค์ด ๋ณ๊ฒฝ๋์ง๋ง, ์ด๋ ๊ทธ์ค์์๋ ๊ฐ์ฅ ์ค์ํ ๋ณํ ์ค ํ๋์
๋๋ค. |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ ํ์ธํ๊ธฐ |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ ๋์๋์ง ํ์ธํ๋ ค๋ฉด, ์๋ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค: |
|||
|
|||
//// tab | Linux, macOS, Windows Bash |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ which python |
|||
|
|||
/home/user/code/awesome-project/.venv/bin/python |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows PowerShell |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ Get-Command python |
|||
|
|||
C:\Users\user\code\awesome-project\.venv\Scripts\python |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
//// |
|||
|
|||
์ฆ, ํ์ฌ ์ฌ์ฉ๋๋ `python` ํ๋ก๊ทธ๋จ์ **๊ฐ์ ํ๊ฒฝ ๋ด๋ถ์ ์๋ ๊ฒ**์
๋๋ค. |
|||
|
|||
Linux์ macOS์์๋ `which`, Windows PowerShell์์๋ `Get-Command` ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
|||
|
|||
์ด ๋ช
๋ น์ด๋ `PATH` ํ๊ฒฝ ๋ณ์์ ์ง์ ๋ ๊ฒฝ๋ก๋ค์ **์์๋๋ก ํ์**ํ๋ฉด์ `python`์ด๋ผ๋ ์ด๋ฆ์ ํ๋ก๊ทธ๋จ์ ์ฐพ์ต๋๋ค. |
|||
์ฐพ๋ ์ฆ์, ํด๋น ํ๋ก๊ทธ๋จ์ **๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅ**ํฉ๋๋ค. |
|||
|
|||
์ค์ํ ์ ์ ํฐ๋ฏธ๋์์ `python`์ ์คํํ์ ๋, ์ค์ ๋ก ์คํ๋๋ "`python`"์ด ์ด๋ค ๊ฒ์ธ์ง ์ ํํ ์ ์ ์๋ค๋ ๊ฒ์
๋๋ค. |
|||
|
|||
๋ฐ๋ผ์ ํ์ฌ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ํ๊ฒฝ์ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค. |
|||
|
|||
/// tip | ํ |
|||
|
|||
ํ๋์ ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ ๋ค, ํด๋น Python์ ๊ฐ์ง ์ํ์์ **๋ ๋ค๋ฅธ ํ๋ก์ ํธ**๋ก ์ด๋ํ๋ ๊ฒ์ ํํ ๋ฐ์ํฉ๋๋ค. |
|||
|
|||
ํ์ง๋ง ์ด๋ ์ด์ ํ๋ก์ ํธ์ ๊ฐ์ ํ๊ฒฝ์ ์๋ **์๋ชป๋ Python ์คํ ํ์ผ**์ ์ฌ์ฉํ๊ฒ ๋์ด ์ ํ๋ก์ ํธ๊ฐ **์ ์ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.** |
|||
|
|||
๊ทธ๋์ ํ์ฌ ์ด๋ค `python`์ด ์ฌ์ฉ๋๊ณ ์๋์ง ํ์ธํ ์ ์๋ ๋ฅ๋ ฅ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๐ค |
|||
|
|||
/// |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ์ ๋นํ์ฑํํ๋ ์ด์ |
|||
|
|||
์๋ฅผ ๋ค์ด `๋ง๋ฒ์ฌ์ ๋(philosophers-stone)`์ด๋ผ๋ ํ๋ก์ ํธ์์ ์์
์ค์ด๋ผ๊ณ ํด๋ณด๊ฒ ์ต๋๋ค. ์ด๋ ํด๋น **๊ฐ์ ํ๊ฒฝ์ ํ์ฑํ**ํ๊ณ , ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๋ฉฐ ์์
์ ์งํํฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฐ๋ฐ ์ด์ ๋ **๋ค๋ฅธ ํ๋ก์ ํธ**์ธ `์์ฆ์นด๋ฐ์ ์ฃ์(prisoner-of-azkaban)`์ ์์
ํ๊ณ ์ถ์ด์ก์ต๋๋ค. |
|||
|
|||
๊ทธ๋์ ๊ทธ ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํฉ๋๋ค: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ cd ~/code/prisoner-of-azkaban |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
๋ง์ฝ `๋ง๋ฒ์ฌ์ ๋(philosophers-stone)`์ ๊ฐ์ ํ๊ฒฝ์ ๋นํ์ฑํํ์ง ์์๋ค๋ฉด, ํฐ๋ฏธ๋์์ `python`์ ์คํํ ๋ ์ฌ์ ํ `๋ง๋ฒ์ฌ์ ๋(philosophers-stone)` ๊ฐ์ ํ๊ฒฝ์ Python์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ cd ~/code/prisoner-of-azkaban |
|||
|
|||
$ python main.py |
|||
|
|||
// sirius๋ฅผ ์ํฌํธํ๋ ๋ฐ ์คํจํ์ต๋๋ค. ์ค์น๋์ด ์์ง ์์์ ๐ฑ |
|||
Traceback (most recent call last): |
|||
File "main.py", line 1, in <module> |
|||
import sirius |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
ํ์ง๋ง `๋ง๋ฒ์ฌ์ ๋(philosophers-stone)`์ ๊ฐ์ ํ๊ฒฝ์ ๋นํ์ฑํํ ๋ค์, `์์ฆ์นด๋ฐ์ ์ฃ์(prisoner-of-azkaban)` ํ๋ก์ ํธ์ ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ๋ฉด, ์ด์ `python` ๋ช
๋ น์ด๋ `์์ฆ์นด๋ฐ์ ์ฃ์(prisoner-of-azkaban)` ๊ฐ์ ํ๊ฒฝ์ Python์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ cd ~/code/prisoner-of-azkaban |
|||
|
|||
// ์ด์ ๋๋ ํฐ๋ฆฌ์ ์์ ํ์ ์์ด, ์ด๋์๋ ๊ฐ์ ํ๊ฒฝ์ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ ํ์๋ ๊ด์ฐฎ์์ ๐ |
|||
$ deactivate |
|||
|
|||
// prisoner-of-azkaban/.venv ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํฉ๋๋ค ๐ |
|||
$ source .venv/bin/activate |
|||
|
|||
// ์ด์ python์ ์คํํ๋ฉด, ์ด ๊ฐ์ ํ๊ฒฝ์ ์ค์น๋ sirius ํจํค์ง๋ฅผ ์ฐพ๊ฒ ๋ฉ๋๋ค โจ |
|||
$ python main.py |
|||
|
|||
๋ชป๋ ์ง์ ๊พธ๋ฏธ๊ณ ์์์ ์์ํ ๋งน์ธํฉ๋๋ค.๐ง |
|||
ImportError๋ ์ด์ ์์ต๋๋ค. ๐บ |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
## ๋์๋ค |
|||
|
|||
์ด ๋ฌธ์๋ ์ฌ๋ฌ๋ถ์ด Python ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ , **๊ทธ ๋ด๋ถ์์** ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ์๋ ค์ฃผ๋ ๊ฐ๋จํ ๊ฐ์ด๋์
๋๋ค. |
|||
|
|||
๊ฐ์ ํ๊ฒฝ, ํจํค์ง ์์กด์ฑ(Requirements), ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์๋ ์ด ์ธ์๋ ๋ค์ํ **๋์**๋ค์ด ์กด์ฌํฉ๋๋ค. |
|||
|
|||
๋ง์ฝ ์ค๋น๊ฐ ๋์๋ค๋ฉด, **ํ๋ก์ ํธ ์ ์ฒด**, ํจํค์ง ์์กด์ฑ, ๊ฐ์ ํ๊ฒฝ ๋ฑ์ ํตํฉ์ ์ผ๋ก **๊ด๋ฆฌ**ํ ์ ์๋ ๋๊ตฌ๋ฅผ ์จ๋ณด๋ ๊ฒ๋ ์ข์ต๋๋ค. ๊ทธ๋ด ๋ ์ถ์ฒํ๋ ๋๊ตฌ๊ฐ ๋ฐ๋ก <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>์
๋๋ค. |
|||
|
|||
`uv`๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค: |
|||
|
|||
* ๋ค์ํ ๋ฒ์ ์ **Python ์ค์น** |
|||
* ๊ฐ ํ๋ก์ ํธ ๋ณ **๊ฐ์ ํ๊ฒฝ ๊ด๋ฆฌ** |
|||
* **ํจํค์ง ์ค์น** |
|||
* ํ๋ก์ ํธ์ **์์กด์ฑ๊ณผ ๋ฒ์ ** ๊ด๋ฆฌ |
|||
* ์ค์น๋ ํจํค์ง๋ค๊ณผ ๊ทธ ๋ฒ์ ์ **์ ํํ ๊ณ ์ (lock)**ํด์,๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ด์ ํ๊ฒฝ์ด ์์ ํ ๋์ผํ๊ฒ ์๋ํ ์ ์๋๋ก ๋ณด์ฅ |
|||
* ์ด ์ธ์๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ |
|||
|
|||
## ๊ฒฐ๋ก |
|||
|
|||
์ฌ๊ธฐ๊น์ง ๋ชจ๋ ์ฝ๊ณ ์ดํดํ๋ค๋ฉด, ์ด์ ๋ง์ ๊ฐ๋ฐ์๋ค๋ณด๋ค ๊ฐ์ ํ๊ฒฝ์ **ํจ์ฌ ๋ ๊น์ด ์๊ฒ ์ดํด**ํ๊ฒ ๋์
จ์ต๋๋ค. ๐ค |
|||
|
|||
์ด๋ฐ ์ธ๋ถ์ ์ธ ๋ด์ฉ์ ์๊ณ ์์ผ๋ฉด, ์ธ์ ๊ฐ ๋ณต์กํด ๋ณด์ด๋ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น
ํ ๋ ๋ถ๋ช
ํ ํฐ ๋์์ด ๋ ๊ฒ์
๋๋ค. ์ด์ ๋ **์ด ๋ชจ๋ ๊ฒ๋ค์ด ๋ด๋ถ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง** ์๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๐ |
Loadingโฆ
Reference in new issue