1 changed files with 845 additions and 0 deletions
@ -0,0 +1,845 @@ |
|||
# ๊ฐ์ ํ๊ฒฝ |
|||
|
|||
ํ์ด์ฌ ํ๋ก์ ํธ์์ ์์
ํ ๋, ๊ฐ ํ๋ก์ ํธ๋ง๋ค ์ค์นํ๋ ํจํค์ง๋ฅผ ๊ฒฉ๋ฆฌํ๊ธฐ ์ํด **๊ฐ์ ํ๊ฒฝ(virtual environment)**(๋๋ ์ ์ฌํ ๋ฉ์ปค๋์ฆ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. |
|||
|
|||
|
|||
/// info | ์ ๋ณด |
|||
|
|||
๋ง์ฝ ๊ฐ์ ํ๊ฒฝ์ ์ด๋ป๊ฒ ์์ฑํ๊ณ ์ฌ์ฉํ๋์ง ์ด๋ฏธ ์๊ณ ์๋ค๋ฉด, ์ด ์น์
์ ๊ฑด๋๋ฐ์ด๋ ๋ฉ๋๋ค. ๐ค |
|||
|
|||
/// |
|||
|
|||
/// tip | ํ |
|||
|
|||
**๊ฐ์ ํ๊ฒฝ(virtual environment)**์ **ํ๊ฒฝ ๋ณ์(environment variable)**์ ๋ค๋ฆ
๋๋ค. |
|||
|
|||
**ํ๊ฒฝ ๋ณ์**๋ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์๋ ์์คํ
๋ณ์์
๋๋ค. |
|||
|
|||
**๊ฐ์ ํ๊ฒฝ**์ ์ด๋ค ํ์ผ๋ค์ด ํฌํจ๋ ํ๋์ ๋๋ ํฐ๋ฆฌ์
๋๋ค. |
|||
|
|||
/// |
|||
|
|||
/// info | ์ ๋ณด |
|||
|
|||
์ด ํ์ด์ง๋ **๊ฐ์ ํ๊ฒฝ**์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์๋ ์๋ฆฌ๋ฅผ ์๋ ค์ค๋๋ค. |
|||
|
|||
๋ง์ฝ **๋ชจ๋ ๊ฒ์ ๊ด๋ฆฌํด ์ฃผ๋ ๋๊ตฌ**(ํ์ด์ฌ ์ค์น๋ฅผ ํฌํจํด)๋ฅผ ์ ํํ๊ณ ์ถ๋ค๋ฉด, <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>๋ฅผ ์ฌ์ฉํด ๋ณด์ญ์์ค. |
|||
|
|||
/// |
|||
|
|||
## ํ๋ก์ ํธ ์์ฑ |
|||
|
|||
๋จผ์ ํ๋ก์ ํธ๋ฅผ ์ํ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ์ญ์์ค. |
|||
|
|||
์์ ์์๋ ์ฌ์ฉ์ ํ ๋๋ ํฐ๋ฆฌ ๋ด `code`๋ผ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ํ๋ก์ ํธ๋ณ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// ํ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ |
|||
$ cd |
|||
// ๋ชจ๋ ํ๋ก์ ํธ๋ฅผ ์ํ code ๋๋ ํฐ๋ฆฌ ์์ฑ |
|||
$ mkdir code |
|||
// code ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ |
|||
$ cd code |
|||
// ์ด ํ๋ก์ ํธ๋ฅผ ์ํ ๋๋ ํฐ๋ฆฌ ์์ฑ |
|||
$ mkdir awesome-project |
|||
// ์์ฑํ ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ |
|||
$ cd awesome-project |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ ์์ฑ |
|||
|
|||
ํ์ด์ฌ ํ๋ก์ ํธ๋ฅผ **์ฒ์** ์์ํ ๋, **<abbr title="๋ค๋ฅธ ๋ฐฉ๋ฒ๋ค๋ ์์ง๋ง, ์ด๊ฒ์ ๊ฐ์ฅ ๊ฐ๋จํ ๊ฐ์ด๋๋ผ์ธ์
๋๋ค.">์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ ์์</abbr>** ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ์ญ์์ค. |
|||
|
|||
/// tip | ํ |
|||
|
|||
์ด ์์
์ **ํ๋ก์ ํธ๋น ํ ๋ฒ**๋ง ์ํํ๋ฉด ๋๋ฉฐ, ๋งค๋ฒ ํ ํ์๋ ์์ต๋๋ค. |
|||
|
|||
/// |
|||
|
|||
//// tab | `venv` |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ์์ฑํ๊ธฐ ์ํด, ํ์ด์ฌ์ ๋ด์ฅ๋ `venv` ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ python -m venv .venv |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
/// details | ๋ช
๋ น์ด์ ์๋ฏธ |
|||
|
|||
* `python`: `python`์ด๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํฉ๋๋ค. |
|||
* `-m`: ๋ชจ๋์ ์คํฌ๋ฆฝํธ๋ก์ ์คํํฉ๋๋ค. ์ด๊ฒ ๋ค์์ ์คํํ ๋ชจ๋์ ์ง์ ํ ๊ฒ์
๋๋ค. |
|||
* `venv`: ํ์ด์ฌ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจ๋ `venv` ๋ชจ๋์ ์ฌ์ฉํฉ๋๋ค. |
|||
* `.venv`: ์๋ก์ด ๋๋ ํฐ๋ฆฌ `.venv`์ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
//// |
|||
|
|||
//// tab | `uv` |
|||
|
|||
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๊ฐ ์ค์น๋์ด ์๋ค๋ฉด, ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ ์ ์์ต๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ uv venv |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
/// tip | ํ |
|||
|
|||
๊ธฐ๋ณธ์ ์ผ๋ก `uv`๋ `.venv`๋ผ๋ ๋๋ ํฐ๋ฆฌ์ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํฉ๋๋ค. |
|||
|
|||
ํ์ง๋ง ๋๋ ํฐ๋ฆฌ ์ด๋ฆ์ ์ถ๊ฐ ์ธ์๋ก ์ ๋ฌํ์ฌ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์ ์์ต๋๋ค. |
|||
|
|||
/// |
|||
|
|||
//// |
|||
|
|||
ํด๋น ๋ช
๋ น์ด๋ `.venv`๋ผ๋ ๋๋ ํฐ๋ฆฌ์ ์๋ก์ด ๊ฐ์ ํ๊ฒฝ์ ์์ฑํฉ๋๋ค. |
|||
|
|||
/// details | `.venv` ๋๋ ๋ค๋ฅธ ์ด๋ฆ |
|||
|
|||
๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ์ ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ ์๋ ์์ง๋ง, `.venv`๋ก ์ด๋ฆ์ ๋ถ์ด๋ ๊ด๋ก๊ฐ ์์ต๋๋ค. |
|||
|
|||
/// |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ ํ์ฑํ |
|||
|
|||
์๋ก์ด ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ์ฌ, ์ฌ๋ฌ๋ถ์ด ์คํํ๋ ํ์ด์ฌ ๋ช
๋ น์ด๋ ์ค์นํ๋ ํจํค์ง๊ฐ ๊ฐ์ ํ๊ฒฝ์ ์ฌ์ฉํ๋๋ก ํฉ๋๋ค. |
|||
|
|||
/// 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> |
|||
|
|||
์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ(์์ ์์๋ `awesome-project`) ๋ด๋ถ์์, `python`์ ๋ฐ์ด๋๋ฆฌ๊ฐ `.venv/bin/python`๋ก ํ์๋๋ค๋ฉด ์ ๋๋ก ์๋ํ๋ ๊ฒ์
๋๋ค.๐ |
|||
|
|||
//// |
|||
|
|||
//// tab | Windows PowerShell |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ Get-Command python |
|||
|
|||
C:\Users\user\code\awesome-project\.venv\Scripts\python |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ(์์ ์์๋ `awesome-project`) ๋ด๋ถ์์, `python`์ ๋ฐ์ด๋๋ฆฌ๊ฐ `.venv\Scripts\python`๋ก ํ์๋๋ค๋ฉด ์ ๋๋ก ์๋ํ๋ ๊ฒ์
๋๋ค.๐ |
|||
|
|||
//// |
|||
|
|||
## `pip` ์
๊ทธ๋ ์ด๋ |
|||
|
|||
/// tip | ํ |
|||
|
|||
<a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>๋ฅผ ์ฌ์ฉํ๋ค๋ฉด `pip` ๋์ `uv`๋ฅผ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ์ค์นํ๋ฏ๋ก, `pip`๋ฅผ ์
๊ทธ๋ ์ด๋ํ ํ์๊ฐ ์์ต๋๋ค. ๐ |
|||
|
|||
/// |
|||
|
|||
๋ง์ฝ `pip`(ํ์ด์ฌ์ ๋ด์ฅ๋)๋ฅผ ์ฌ์ฉํด ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์๋ค๋ฉด, `pip`๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก **์
๊ทธ๋ ์ด๋**ํด์ผ ํฉ๋๋ค. |
|||
|
|||
ํจํค์ง๋ฅผ ์ค์นํ ๋ ๋ฐ์ํ๋ ๋ง์ ์ค๋ฅ๋ `pip`๋ฅผ ๋จผ์ ์
๊ทธ๋ ์ด๋ํ๋ ๊ฒ๋ง์ผ๋ก๋ ํด๊ฒฐ๋ฉ๋๋ค. |
|||
|
|||
/// tip | ํ |
|||
|
|||
์ผ๋ฐ์ ์ผ๋ก ์ด ์์
์ **ํ๋ฒ**๋ง ์ํํ๋ฉฐ, ๊ฐ์ ํ๊ฒฝ์ ์์ฑํ ์งํ์ ํฉ๋๋ค. |
|||
|
|||
/// |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ ๋์ด ์๋์ง ํ์ธ(์์ ๋ช
๋ น์ด๋ก)ํ ํ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ํํ์ญ์์ค: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ python -m pip install --upgrade pip |
|||
|
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
## `.gitignore` ์ถ๊ฐ |
|||
|
|||
**Git**์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, `.venv` ๋ด์ ๋ชจ๋ ํญ๋ชฉ์ด Git์์ ์ ์ธ๋๋๋ก `.gitignore` ํ์ผ์ ์ถ๊ฐํ์ญ์์ค. (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 "*"`: ํฐ๋ฏธ๋์ `*`๋ฅผ "์ถ๋ ฅ(print)" ํฉ๋๋ค (๋ค์ ๋ถ๋ถ์์ ์ฝ๊ฐ ๋ณ๊ฒฝ๋ฉ๋๋ค). |
|||
* `>`: `>`์ ์ผ์ชฝ์ ๋ช
๋ น์ด๋ก ํฐ๋ฏธ๋์ ์ถ๋ ฅ๋ ๋ด์ฉ์ ํ๋ฉด์ ์ถ๋ ฅํ์ง ์๊ณ , `>`์ ์ค๋ฅธ์ชฝ์ ์ง์ ๋ ํ์ผ์ ์ ์ฅํฉ๋๋ค. |
|||
* `.gitignore`: ํ
์คํธ๊ฐ ์ฐ์ฌ์ง ํ์ผ์ ์ด๋ฆ์
๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ Git์์ `*`๋ "๋ชจ๋ ๊ฒ(everything)"์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋์ `.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 |
|||
``` |
|||
|
|||
/// |
|||
|
|||
## ํ๋ก๊ทธ๋จ ์คํ |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ํ์ฑํํ ํ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ผ๋ฉฐ, ์ด ๋ ๊ฐ์ ํ๊ฒฝ ๋ด๋ถ์ ํ์ด์ฌ๊ณผ ์ค์น๋ ํจํค์ง๋ค์ด ์ฌ์ฉ๋ฉ๋๋ค. |
|||
|
|||
<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`์ ์คํํ ๋, ํจํค์ง๊ฐ ์ค์น๋ ๊ฐ์ ํ๊ฒฝ์์ ์คํ๋์ง ์๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
## ์์
์ค๋น ์๋ฃ |
|||
|
|||
์ด์ ํ๋ก์ ํธ ์์
์ ์์ํ ์ค๋น๊ฐ ๋๋ฌ์ต๋๋ค. |
|||
|
|||
|
|||
|
|||
/// tip | ํ |
|||
|
|||
์์์ ์ค๋ช
ํ ๋ชจ๋ ๋ด์ฉ์ ์ดํดํ๊ณ ์ถ๋์? |
|||
|
|||
๊ณ์ ์ฝ์ด๋ณด์ธ์. ๐๐ค |
|||
|
|||
/// |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ์ ํ์์ฑ |
|||
|
|||
FastAPI๋ก ์์
ํ๋ ค๋ฉด <a href="https://www.python.org/" class="external-link" target="_blank">Python</a>์ ์ค์นํด์ผ ํฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฐ ํ์ FastAPI์ ์ฌ์ฉํ๋ ค๋ ๋ค๋ฅธ **ํจํค์ง๋ค**์ **์ค์น**ํด์ผ ํฉ๋๋ค. |
|||
|
|||
ํจํค์ง๋ค์ ์ค์นํ ๋๋ ๋ณดํต ํ์ด์ฌ์ ๋ด์ฅ๋ `pip` ๋ช
๋ น์ด(๋๋ ์ ์ฌํ ๋์ฒด ๋๊ตฌ)๋ฅผ ์ฌ์ฉํฉ๋๋ค. |
|||
|
|||
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , `pip`๋ฅผ ์ง์ ์ฌ์ฉํ๋ฉด ํจํค์ง๋ค์ด **์ ์ญ ํ์ด์ฌ ํ๊ฒฝ(global Python environment)**(์ ์ญ์ ์ผ๋ก ์ค์น๋ ํ์ด์ฌ)์ ์ค์น๋ฉ๋๋ค. |
|||
|
|||
### ๋ฌธ์ ์ |
|||
|
|||
๊ทธ๋ ๋ค๋ฉด, ์ ์ ์ญ ํ์ด์ฌ ํ๊ฒฝ์ ํจํค์ง๋ฅผ ์ค์นํ๋๊ฒ ๋ฌธ์ ๊ฐ ๋ ๊น์? |
|||
|
|||
์ฌ๋ฌ๋ถ์ ์๋ง๋ ์ธ์ ๊ฐ **์๋ก ๋ค๋ฅธ ํจํค์ง๋ค**์ ์์กดํ๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ๋ค์ ๋ง๋ค๊ฒ ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ค ์ผ๋ถ ํ๋ก์ ํธ๋ ๊ฐ์ ํจํค์ง์ **๋ค๋ฅธ ๋ฒ์ **์ ์์กดํ๊ฒ ๋ ๊ฒ์
๋๋ค. ๐ฑ |
|||
|
|||
์๋ฅผ ๋ค์ด `philosophers-stone`๋ผ๋ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ์ด ํ๋ก๊ทธ๋จ์ ํจํค์ง **`harry` ๋ฒ์ 1**์ ์์กดํ๊ณ , ์ฌ๋ฌ๋ถ์ `harry`๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. |
|||
|
|||
```mermaid |
|||
flowchart LR |
|||
stone(philosophers-stone) -->|requires| harry-1[harry v1] |
|||
``` |
|||
|
|||
๊ทธ๋ฐ ํ์ `prisoner-of-azkaban`๋ผ๋ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ํ๋ก์ ํธ ๋ํ `harry`์ ์์กดํ์ง๋ง, ์ด ํ๋ก์ ํธ๋ **`harry` ๋ฒ์ `3`** ์ ํ์๋ก ํฉ๋๋ค. |
|||
|
|||
```mermaid |
|||
flowchart LR |
|||
azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3] |
|||
``` |
|||
|
|||
ํ์ง๋ง ์ด์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ง์ฝ ํจํค์ง๋ฅผ ๋ก์ปฌ **๊ฐ์ ํ๊ฒฝ**์ด ์๋ ์ ์ญ์ ์ผ๋ก(์ ์ญ ํ๊ฒฝ์) ์ค์นํ๋ค๋ฉด, ์ฌ๋ฌ๋ถ์ `harry`์ ์ด๋ค ๋ฒ์ ์ ์ค์นํ ์ง ์ ํํด์ผ ํฉ๋๋ค. |
|||
|
|||
์๋ฅผ ๋ค์ด `philosophers-stone`์ ์คํํ๋ ค๋ฉด ๋จผ์ ๋ค์๊ณผ ๊ฐ์ด `harry` ๋ฒ์ `1`์ ์ค์นํ ๊ฒ์
๋๋ค: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ pip install "harry==1" |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
์ด์ ์ ์ญ ํ์ด์ฌ ํ๊ฒฝ์ `harry` ๋ฒ์ `1`์ด ์ค์น๋ ์ํ๊ฐ ๋ฉ๋๋ค. |
|||
|
|||
```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` ๋ฒ์ `1`์ ์ ๊ฑฐํ๊ณ `harry` ๋ฒ์ `3`์ ์ค์นํด์ผ ํฉ๋๋ค. (๋๋ ๋ฒ์ `3`์ ์ค์นํ๋ฉด ์๋์ผ๋ก ๋ฒ์ `1`์ด ์ ๊ฑฐ๋ฉ๋๋ค.) |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ pip install "harry==3" |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
์ด์ ์ ์ญ ํ์ด์ฌ ํ๊ฒฝ์ `harry` ๋ฒ์ `3`์ด ์ค์น๋ ์ํ๊ฐ ๋ฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ๋ค์ `philosophers-stone`์ ์คํํ๋ ค๊ณ ํ๋ฉด, `harry` ๋ฒ์ `1`์ ํ์๋ก ํ๋ฏ๋ก **์ ์์ ์ผ๋ก ์๋ํ์ง ์์** ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. |
|||
|
|||
```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 | ํ |
|||
|
|||
์ผ๋ฐ์ ์ผ๋ก ํ์ด์ฌ ํจํค์ง๋ค์ **์๋ก์ด ๋ฒ์ **์์ **ํธํ์ฑ์ด ์์๋๋ ๋ณ๊ฒฝ(breaking changes)์ ํผํ๊ธฐ** ์ํด ์ต์ ์ ๋คํ์ง๋ง, ๋ ์์ ํด์ง๋ ๋ฐฉ๋ฒ์ ์๋ก์ด ๋ฒ์ ์ ๊ณํ์ ์ผ๋ก ์ค์นํ๊ณ ๋ชจ๋ ๊ฒ์ด ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ
์คํธ๋ฅผ ์คํํด ํ์ธํ๋ ๊ฒ์
๋๋ค. |
|||
|
|||
/// |
|||
|
|||
์ด์ ์ฌ๋ฌ๋ถ์ **๋ชจ๋ ํ๋ก์ ํธ๊ฐ ์์กดํ๋** **๋ง์** ๋ค๋ฅธ **ํจํค์ง๋ค**์ด ์๋ค๊ณ ์์ํด๋ณด์ญ์์ค. ๊ทธ๊ฒ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ตญ ์ด๋ค ํ๋ก์ ํธ๋ **ํธํ๋์ง ์๋ ๋ฒ์ **์ ํจํค์ง์ ํจ๊ป ์คํ๋ ๊ฒ์ด๊ณ , ๊ทธ๊ฒ์ด ์ ์ ๋๋ก ์๋ํ์ง ์๋์ง ์๊ธฐ ์ด๋ ค์ธ ์๋ ์์ต๋๋ค. |
|||
|
|||
๋ํ ์ฌ์ฉ ์ค์ธ ์ด์์ฒด์ (์: Linux, Windows, macOS)์ ๋ฐ๋ผ, ํ์ด์ฌ์ด ์ด๋ฏธ ์ค์น๋์ด ์์ ์๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ฒฝ์ฐ, ๋๊ฐ๋ ์์คํ
์์ ์๊ตฌ๋๋ ํน์ ๋ฒ์ ์ ํจํค์ง๋ค์ด ๋ฏธ๋ฆฌ ์ค์น๋์ด ์์ต๋๋ค. ๋ง์ฝ ์ ์ญ ํ์ด์ฌ ํ๊ฒฝ์ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด, ์ด์์ฒด์ ์์ ์ ๊ณตํ๋ ์ผ๋ถ ํ๋ก๊ทธ๋จ์ด **์์๋ ์ํ**์ด ์์ต๋๋ค. |
|||
|
|||
## ํจํค์ง๊ฐ ์ค์น๋ ์์น |
|||
|
|||
ํ์ด์ฌ์ ์ค์นํ ๋ ์ปดํจํฐ์ ์ฌ๋ฌ ๋๋ ํฐ๋ฆฌ๋ค๊ณผ ํ์ผ๋ค์ด ์์ฑ๋ฉ๋๋ค. |
|||
|
|||
์ด ๋๋ ํฐ๋ฆฌ๋ค ์ค ์ผ๋ถ๋ ์ฌ๋ฌ๋ถ์ด ์ค์นํ ๋ชจ๋ ํจํค์ง๋ค์ ์ ์ฅํ๋ ์ญํ ์ ํฉ๋๋ค. |
|||
|
|||
๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํ ๊ฒฝ์ฐ: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
// ์ง๊ธ์ ๋ฐ๋ผ ์คํํ์ง ๋ง์ธ์. ์ด๊ฒ์ ๋จ์ง ์์์
๋๋ค ๐ค |
|||
$ pip install "fastapi[standard]" |
|||
---> 100% |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
์ผ๋ฐ์ ์ผ๋ก๋ <a href="https://pypi.org/project/fastapi/" class="external-link" target="_blank">PyPI</a>์์ FastAPI ์ฝ๋๊ฐ ์์ถ๋ ํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค. |
|||
|
|||
๋ํ FastAPI๊ฐ ์์กดํ๋ ๋ค๋ฅธ ํจํค์ง ํ์ผ๋ค๋ **๋ค์ด๋ก๋**ํฉ๋๋ค. |
|||
|
|||
๊ทธ๋ฐ ํ ๋ค์ด๋ก๋ํ ๋ชจ๋ ํ์ผ์ **์ถ์ถ(extract)**ํ์ฌ ์ปดํจํฐ์ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅํฉ๋๋ค. |
|||
|
|||
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ ๊ฒ ๋ค์ด๋ก๋ํ์ฌ ์ถ์ถ๋ ํ์ผ๋ค์ ํ์ด์ฌ ์ค์น ๋๋ ํฐ๋ฆฌ์ ์ ์ฅ๋๋ฉฐ, ์ด๋ **์ ์ญ ํ๊ฒฝ**์
๋๋ค. |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ์ด๋ |
|||
|
|||
์ ์ญ ํ๊ฒฝ์ ๋ชจ๋ ํจํค์ง๋ฅผ ์ค์นํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ **ํ๋ก์ ํธ๋ณ ๊ฐ์ ํ๊ฒฝ**์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. |
|||
|
|||
๊ฐ์ ํ๊ฒฝ์ ์ ์ญ ํ๊ฒฝ๊ณผ ์ ์ฌํ๊ฒ **๋๋ ํฐ๋ฆฌ**์ธ๋ฐ, ํน์ ํ๋ก์ ํธ๋ฅผ ์ํ ํจํค์ง๋ฅผ ์ค์นํ ์ ์์ต๋๋ค. |
|||
|
|||
์ด๋ ๊ฒ ํ๋ฉด, ๊ฐ ํ๋ก์ ํธ๋ ์์ ์ ํจํค์ง๋ฅผ ์ํ ์์ฒด์ ์ธ ๊ฐ์ ํ๊ฒฝ(`.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 |
|||
|
|||
๋๋ Window์์ 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` ํ๊ฒฝ ๋ณ์์ ๋ํด ๋ ์์ธํ ์๊ณ ์ถ๋ค๋ฉด [ํ๊ฒฝ ๋ณ์](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`์ ์
๋ ฅํ๋ฉด, ์์คํ
์ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ๋ค์ ์์น์์ ์ฐพ๊ณ |
|||
|
|||
```plaintext |
|||
/home/user/code/awesome-project/.venv/bin/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`์ ์
๋ ฅํ๋ฉด, ์์คํ
์ ํ์ด์ฌ ํ๋ก๊ทธ๋จ์ ๋ค์ ์์น์์ ์ฐพ๊ณ |
|||
|
|||
|
|||
```plaintext |
|||
C:\Users\user\code\awesome-project\.venv\Scripts\python |
|||
``` |
|||
|
|||
๊ทธ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. |
|||
|
|||
//// |
|||
|
|||
์ค์ํ ์ ์ ๊ฐ์ ํ๊ฒฝ์ ๊ฒฝ๋ก๊ฐ `PATH` ๋ณ์์ **๊ฐ์ฅ ์์** ์ถ๊ฐ๋๋ค๋ ๊ฒ์
๋๋ค. ์์คํ
์ ๋ค๋ฅธ ํ์ด์ฌ์ ์ฐพ๊ธฐ **์ ์** ์ด ๊ฒฝ๋ก์์ ๋จผ์ ํ์ด์ฌ์ ์ฐพ์ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ `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`์ด ์ฌ์ฉ๋๊ณ ์๋์ง ํ์ธํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ์ฉํฉ๋๋ค. ๐ค |
|||
|
|||
/// |
|||
|
|||
## ๊ฐ์ ํ๊ฒฝ์ ๋นํ์ฑํ ํ๋ ์ด์ |
|||
|
|||
์๋ฅผ ๋ค์ด **๊ฐ์ ํ๊ฒฝ์ ํ์ฑํ ํ** `philosophers-stone` ํ๋ก์ ํธ์์ ์์
์ค์ผ ๋, ๊ทธ ํ๊ฒฝ์์ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ์์
ํ ์ ์์ต๋๋ค. |
|||
|
|||
๊ทธ๋ฆฌ๊ณ ๋์ **๋ค๋ฅธ ํ๋ก์ ํธ**์ธ `prisoner-of-azkaban`์์ ์์
ํ๊ธธ ์ํ ์๋ ์์ต๋๋ค. |
|||
|
|||
๊ทธ ํ๋ก์ ํธ๋ก ์ด๋ํฉ๋๋ค: |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ cd ~/code/prisoner-of-azkaban |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
`philosophers-stone`์ ๊ฐ์ ํ๊ฒฝ์ ๋นํ์ฑํํ์ง ์์ผ๋ฉด, ํฐ๋ฏธ๋์์ `python`์ ์คํํ ๋ `philosophers-stone`์ ํ์ด์ฌ์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
<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> |
|||
|
|||
ํ์ง๋ง ๊ฐ์ ํ๊ฒฝ์ ๋นํ์ฑํ ํ๊ณ `prisoner-of-askaban`์ ์ํ ์๋ก์ด ๊ฐ์ ํ๊ฒฝ์ ํ์ฑํ ํ๋ค๋ฉด, `python`์ ์คํํ ๋ `prisoner-of-azkaban`์ ๊ฐ์ ํ๊ฒฝ์์ ํ์ด์ฌ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. |
|||
|
|||
<div class="termy"> |
|||
|
|||
```console |
|||
$ cd ~/code/prisoner-of-azkaban |
|||
|
|||
// ๊ฐ์ ํ๊ฒฝ์ ๋นํ์ฑํ ํ๊ธฐ ์ํด ๋ฐ๋์ ์ด์ ๋๋ ํฐ๋ฆฌ์ ์์ ํ์๋ ์์ผ๋ฉฐ, ๋ค๋ฅธ ํ๋ก์ ํธ๋ก ์ด๋ํ ํ์๋ ์ด๋์๋ ๋นํ์ฑํํ ์ ์์ต๋๋ค ๐ |
|||
$ deactivate |
|||
|
|||
// prisoner-of-azkaban/.venv ์์ ๊ฐ์ํ๊ฒฝ์ ํ์ฑํํฉ๋๋ค ๐ |
|||
$ source .venv/bin/activate |
|||
|
|||
// ์ด์ ํ์ด์ฌ์ ์คํํ๋ฉด, ์ด ๊ฐ์ ํ๊ฒฝ์ ์ค์น๋ sirius ํจํค์ง๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค โจ |
|||
$ python main.py |
|||
|
|||
I solemnly swear ๐บ |
|||
``` |
|||
|
|||
</div> |
|||
|
|||
## ๋์ |
|||
|
|||
์ด ๊ฐ์ด๋๋ ์์ํ๋ ๋ฐ ๋์์ ์ฃผ๊ณ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ **์๋**ํ๋์ง ์๋ ค์ฃผ๊ธฐ ์ํ ๊ฐ๋จํ ๊ฐ์ด๋์
๋๋ค. |
|||
|
|||
๊ฐ์ ํ๊ฒฝ๊ณผ ํจํค์ง ์์กด์ฑ(์๊ตฌ์ฌํญ), ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ง์ **๋์๋ค**์ด ์์ต๋๋ค. |
|||
|
|||
์ผ๋จ **์ ์ฒด ํ๋ก์ ํธ ๊ด๋ฆฌ**, ํจํค์ง ์์กด์ฑ, ๊ฐ์ ํ๊ฒฝ ๋ฑ์ ๊ด๋ฆฌํ ๋๊ตฌ๋ฅผ ์ํ๊ณ ์ค๋น๊ฐ ๋์๋ค๋ฉด, <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>๋ฅผ ์๋ํด ๋ณด๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค. |
|||
|
|||
`uv`๋ ๋ง์ ์ผ์ ํ ์ ์์ต๋๋ค: |
|||
|
|||
* ๋ค์ํ ๋ฒ์ ์ ํฌํจํ **ํ์ด์ฌ ์ค์น** |
|||
* ํ๋ก์ ํธ์ **๊ฐ์ ํ๊ฒฝ** ๊ด๋ฆฌ |
|||
* **ํจํค์ง** ์ค์น |
|||
* ํ๋ก์ ํธ๋ฅผ ์ํ ํจํค์ง **์์กด์ฑ ๋ฐ ๋ฒ์ ** ๊ด๋ฆฌ |
|||
* ๊ฐ๋ฐ ์ค์ธ ์ปดํจํฐ์ ํ๋ก๋์
ํ๊ฒฝ์์ ๋์ผํ๊ฒ ์คํํ ์ ์๋๋ก, **์ ํํ** ํจํค์ง์ ๋ฒ์ ๋ฐ ์์กด์ฑ์ ์งํฉ์ ์ค์นํ๋๋ก ํ๋ **๋กํน(locking)** |
|||
* ๊ทธ ์ธ์ ๋ง์ ๋ค๋ฅธ ๊ธฐ๋ฅ๋ค |
|||
|
|||
## ๊ฒฐ๋ก |
|||
|
|||
์ด ๋ชจ๋ ๋ด์ฉ์ ์ฝ๊ณ ์ดํดํ๋ค๋ฉด, ์ด์ ์ฌ๋ฌ๋ถ์ ๋ค๋ฅธ ๋ง์ ๊ฐ๋ฐ์๋ค ๋ณด๋ค ๊ฐ์ ํ๊ฒฝ์ ๋ํด **ํจ์ฌ ๋ ์ ์๊ฒ๋์์ต๋๋ค**. ๐ค |
|||
|
|||
์ด ์ธ๋ถ ์ฌํญ๋ค์ ์๋ค๋ ๊ฒ์, ์ธ์ ๊ฐ ๋ณต์กํด ๋ณด์ด๋ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น
ํ ๋ ์ ์ฉํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ฌ๋ ๊ทธ๋๋ ์ด **๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง** ์๊ฒ๋ ๊ฒ์
๋๋ค. ๐ |
Loadingโฆ
Reference in new issue