๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โš™๏ธ Environment Setting

[TIL] pyenv + poetry๋กœ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ธํŒ… ํ•˜๊ธฐ (+ python interpreter setting)

by sgaeng 2022. 3. 20.

<WHY? ๊ฐœ๋… ๋จผ์ € ์•Œ๊ธฐ>

(๊ฐ€์ƒํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ๋Š” ์„ค๋ช…ํ•˜์ง€ ์•Š์Œ)

๋” ์„ธ๋ถ€์ ์ธ, ๊ฐ๊ฐ์˜ ์„œ๋“œํŒŒํ‹ฐ๋“ค์˜ ์‚ฌ์šฉ ๋ชฉ์  ์ด์œ ์— ๋Œ€ํ•ด ์„ค๋ช…

pyenv & pip & poetry ์˜ ์ฐจ์ด์ 

 

- venv : python ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด์คŒ

- pyenv: ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ python์„ ์„ค์น˜ํ•˜๊ณ  ์›ํ•˜๋Š” python version์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ

  • ์‚ฌ์šฉ์ž๋ณ„๋กœ ๊ธ€๋กœ๋ฒŒ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.
    (Let you change the global Python version on a per-user basis.)
  • ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.
    (Provide support for per-project Python versions.)
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์š”.
    (Allow you to override the Python version with an environment variable.)
  • ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.
    (Search commands from multiple versions of Python at a time.)

 

- poetry: ๊ฐ€์ƒํ™˜๊ฒฝ ์•ˆ์˜ ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๊ด€๋ฆฌ ํ•ด์ฃผ๋Š” ์นœ๊ตฌ (== ex. requirement.txt)

 

 

 

 

 

ref.&nbsp;https://dev.to/bowmanjd/python-tools-for-managing-virtual-environments-3bko

 

 

 


<APPLY TO> ๊ฐ€์ƒํ™˜๊ฒฝ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ

0๏ธโƒฃ pyenv ๋ฅผ ์„ค์น˜ํ•ด์ฃผ์ž

(brew ์„ค์น˜๋Š” ๋˜์–ด์žˆ๋‹ค๊ณ  ๊ฐ€์ •! ๋งŒ์•ฝ ์—†๋‹ค๋ฉด intel, m1 ์ž˜ ๊ตฌ๋ถ„ํ•ด์„œ ๊ตฌ๊ธ€๋งํ•˜๊ธฐ!)

 

0-1. pyenv ๋ฅผ ์„ค์น˜ํ•ด์ค€๋‹ค. (์•„๋ž˜ ๋ช…๋ น์–ด ์ž…๋ ฅ)

$ brew install pyenv

 

0-2. vi/vim ์—๋””ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ~/.zshrc ์•ˆ์— ๋งจ ๋งˆ์ง€๋ง‰์— ์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค. ($ vi ~/.zshrc)

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init --path)"
fi

Added syntax when installing pyenv

 

0-3. (์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด) ์ˆ˜์ •๋œ ~/.zshrc๋ฅผ ํ˜„์žฌ shell์— ๋ฐ˜์˜ํ•œ๋‹ค.

$ source ~/.zshrc

 

[TIP]

linux์—์„œ source ๋ช…๋ น์–ด๋Š” shell์˜ ์ดˆ๊ธฐํ™” ํŒŒ์ผ(~/.bash_profile, ~/.zshrc) ์„ ์ˆ˜์ •ํ–ˆ์„ ๊ฒฝ์šฐ logoff ์™€ login ์„ ํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ shell session์— ์„ค์ •์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค.

 

 

0-4. (์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด): pyenv-virtualenv ์„ค์น˜

$ brew install pyenv-virtualenv

[TIP] pyenv ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ pyenv-virtualenv๋„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

- (์ด์œ , ์šฉ๋„์˜ ๊ตฌ๋ถ„) pyenv๊ฐ€ Python ๋ฒ„์ „์„ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ์œ„ํ•œ ์šฉ๋„๋ผ๋ฉด, pyenv-virtualenv๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์˜ ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „๋„ ํ•จ๊ป˜ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ์œ„ํ•œ ์šฉ๋„ ์ด๋‹ค.

- (์ˆœ์„œ) pyenv์˜ ๋ชฉ๋ก์— virtualenv๊ฐ€ ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์—, pyenv๋ฅผ ๋จผ์ € ์„ค์น˜ํ•œ ํ›„ virtualenv๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

 

 

0-5. (์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด) ๋ณ€๊ฒฝ ๋ฐ ์ ์šฉ

$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
$ source ~/.zshrc

์ž˜ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธ

0-6. ์‰˜์„ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.

$ exec "$SHELL"

 

 

 

1๏ธโƒฃ pyenv ๋ฅผ ์ด์šฉํ•ด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ python-version ์„ ์„ค์น˜ํ•ด์ฃผ๊ธฐ

 

1-1. (์•„๋ž˜ ๋ช…๋ น์–ด): pyenv๋ฅผ ํ†ตํ•ด ์„ค์น˜ ๊ฐ€๋Šฅํ•œ python-version ๋ชฉ๋ก ํ™•์ธ

$ pyenv install —list

์•„๋ž˜๋กœ ๋” ๊ธธ๊ฒŒ ์žˆ์Œ~!

1-2. (์•„๋ž˜ ๋ช…๋ น์–ด): ์›ํ•˜๋Š” ํŒŒ์ด์ฌ ๋ฒ„์ „ ์„ค์น˜

$ pyenv install [python-version]

 

1-3. (์•„๋ž˜ ๋ช…๋ น์–ด): ํŠน์ • ํŒŒ์ด์ฌ ๋ฒ„์ „ ์‚ญ์ œ == ๊ฐ€์ƒํ™˜๊ฒฝ ์‚ญ์ œ

$ pyenv uninstall [python-version]

 

1-4. (์•„๋ž˜ ๋ช…๋ น์–ด): ๋‚ด ์ปดํ“จํ„ฐ์— ์„ค์น˜๋œ ํŒŒ์ด์ฌ (์ „์ฒด) ๋ชฉ๋ก ํ™•์ธ

$ pyenv versions

 

1-5. (์•„๋ž˜ ๋ช…๋ น์–ด): ์ง€๊ธˆ ๋‚ด ๋กœ์ปฌ(๋‚ด ์ปดํ“จํ„ฐ ์ „์ฒด)์—์„œ ์‚ฌ์šฉํ•  ๋ฒ„์ „ ์„ค์ •

$ pyenv global [python-version]

[Description]

global ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋Š” ์ด์œ ๋Š”, ๋‚˜์˜ ๋กœ์ปฌ PC๋ฅผ '์ „์ฒด'๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ๊ฐ€์ƒ ํ™˜๊ฒฝ๊ณผ ๊ทธ๊ณณ์— ์ ์šฉ๋˜๋Š” ๋ฒ„์ „์€ ๊ทธ ์ „์ฒด์˜ ๋ถ€๋ถ„๋“ค์ด๋‹ค.

๋ถ€๋ถ„์— ํ•ด๋‹น๋˜๋Š” ๊ฒƒ์€ local, ์ „์ฒด์— ์ ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ global์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

[Add]

(์•„๋ž˜์—์„œ ๋” ๋‚˜์˜ค๊ฒ ์ง€๋งŒ,) ๊ฐ€์ƒํ™˜๊ฒฝ ์•ˆ์—์„œ $ pyenv local <environment_name> ์„ ์ž…๋ ฅํ•˜๋ฉด, ํ•ด๋‹น ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๋งŒ๋“ค์—ˆ์„ ๋•Œ ์ง€์ •ํ•ด์คฌ๋˜ python ๋ฒ„์ „์„ local(๊ฐ€์ƒํ™˜๊ฒฝ, ๋ถ€๋ถ„)์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค!

 

 

python global version์„ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ณผ์ •

 

 

2๏ธโƒฃ pyenv-virtualenv ์ด์šฉํ•ด์„œ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ

2-1. (์•„๋ž˜ ๋ช…๋ น์–ด๋กœ) ์˜ ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ

$ pyenv virtualenv (python-version) <environment_name> : python-version ์ง€์ •
$ pyenv virtualenv <environment_name> : python-version ์ƒ๋žต

<environment_name>๋Š” ๋ณดํ†ต ํ”„๋กœ์ ํŠธ์™€ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ

python-version ์„ ์ƒ๋žตํ•˜๊ณ  ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜๋ฉด ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” python ๋ฒ„์ „์œผ๋กœ ์ž๋™ ์ž…๋ ฅ๋œ๋‹ค.

'fastapi-blog'๋ผ๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ , ์˜์กดํ•˜๋Š” python-version๋„ ํ•จ๊ป˜ ํ™•์ธ

 

2-2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณ„(=ํ”„๋กœ์ ํŠธ ๋ณ„ =๊ฐ€์ƒํ™˜๊ฒฝ ๋ณ„) = loacl ๋ณ„ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์„ค์ • (๋˜๋Š” ํ‘œ์‹œ) ํ•ด๋‘”๋‹ค.

๊ฐ€์ƒํ™˜๊ฒฝ์„ ์ ์šฉํ•˜๊ณ  ์‹ถ์€ ์œ„์น˜์—์„œ (์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด) <environment_name>์ด๋ผ๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ ์ ์šฉ

$ pyenv local <environment_name>

๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ•ด๋‹น ์œ„์น˜(local)์— ์ง€์ • ํ›„, ๊ฐ€์ƒํ™˜๊ฒฝ์—์„œ์˜ python-version ํ™•์ธ

2-1. (์œ„์˜ ๋ช…๋ น์–ด ์‹คํ–‰ํ•˜๋ฉด): ์•„๋ž˜ ์ด๋ฏธ์ง€ ๊ฐ™์ด (ํ˜„ ํด๋” ์œ„์น˜์—) ๊ฐ€์ƒํ™˜๊ฒฝ ์ด๋ฆ„์„ ๊ฐ€์ง„ .python-version ํŒŒ์ผ์ด ์ƒ์„ฑ๋จ 

environment_name ์ด fastapi-blog์ธ ๊ฒฝ์šฐ

 

์ •ํ™•ํ•˜๊ฒŒ ๋ฒ„์ „์ด ๋ช‡์ธ์ง€๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ ์•ˆ์—์„œ $ python --version์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

(์œ„์˜ ๋ช…๋ น์–ด๋Š” ์•”๋ฌต์ ์œผ๋กœ python ๋ฒ„์ „์„ ์•Œ๋ ค์คŒ!)

 

๊ฐ€์ƒํ™˜๊ฒฝ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณ„ ํŒŒ์ด์ฌ ๋ฒ„์ „

 

 

 

 

 

[TIP]

2-1. ๋งŒ๋“ค์–ด์ง„ ๊ฐ€์ƒํ™˜๊ฒฝ์˜ ํŒŒ์ด์ฌ (๋ฒ„์ „์ด ์žˆ๋Š” ์œ„์น˜) ํ™•์ธํ•˜๊ธฐ: $ pyenv which python

2-2. ์„ค์น˜๋œ(=์ œ๊ณตํ•˜๋Š”) ํŒŒ์ผ๋“ค (์œ„์น˜) ํ™•์ธํ•˜๊ธฐ: $ pyenv which pip

 

 

3. (์•„๋ž˜ ๋ช…๋ น์–ด): ๊ฐ€์ƒํ™˜๊ฒฝ ์‚ญ์ œํ•˜๊ธฐ

pyenv uninstall <๊ฐ€์ƒํ™˜๊ฒฝ์ด๋ฆ„>

 

 

 

 

 

3๏ธโƒฃ ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑ & ๋น„ํ™œ์„ฑํ™” ๋ช…๋ น์–ด

[ํ™œ์„ฑ]
$ pyenv activate <environment_name>
[๋น„ํ™œ์„ฑ]
$ pyenv deactivate

๋งŒ์•ฝ ํ˜„์žฌ ํด๋” ์œ„์น˜์— (์œ„์˜ pyenv local <environment_name> ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑ๋œ) .python-version ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด

$ pyenv shell ์ด๋ผ๋Š” ๋ช…๋ น์–ด๋กœ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

[TIP]

์‚ฌ์‹ค pyenv shell ๋ช…๋ น์–ด๋Š” ๋‚ด๊ฐ€ ์ง์ ‘ ์ž…๋ ฅํ•ด์ฃผ์ง€ ์•Š์•„๋„

.python-version ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋”์— ๋“ค์–ด๊ฐ€๋ฉด pyenv๊ฐ€ ์ž๋™์œผ๋กœ .python-version ํŒŒ์ผ์ด ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™”ํ•ด์ค€๋‹ค.

 

 

 

4๏ธโƒฃ poetry ์ด์šฉํ•ด์„œ "ํŒจํ‚ค์ง€ ๋ฒ„์ „๊ด€๋ฆฌ" ํ•ด์ฃผ๊ธฐ!

4-0. ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™” ๋˜์—ˆ๋‹ค๋Š” ์ „์ œ, pip๋„ ์„ค์น˜๋˜์–ด์žˆ๋‹ค๋Š” ์ „์ œ (pip๋Š” python์„ค์น˜์‹œ ์ž๋™ ์„ค์น˜๋จ)

4-1. (์•„๋ž˜ ๋ช…๋ น์–ด): poetry ์„ค์น˜ํ•˜๊ธฐ

$ pip3 install poetry

 

4-2. (์•„๋ž˜ ๋ช…๋ น์–ด): ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ„์น˜(= ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰๋œ ์œ„์น˜)์—์„œ ์‚ฌ์šฉํ•  ํ”„๋กœ์ ํŠธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž(poetry)๋ฅผ ์ƒ์„ฑ

poetry init

(์œ„์˜ ๋ช…๋ น์–ด ํ›„) ๊ณ„์† enter(๊ธฐ๋ณธ ์„ค์ •๊ฐ’)ํ•˜๋ฉด ์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ toml ํŒŒ์ผ์ด ์ƒ์„ฑ๋จ

๊ธฐ๋ณธ ์„ค์ •๊ฐ’์œผ๋กœ poetry ์„ธํŒ…
์œ„์˜ ๋ช…๋ น์–ด๋กœ ์ƒ์„ฑ๋œ pyproject.toml ํŒŒ์ผ (=poetry package ๊ด€๋ฆฌ์ž)

 

4-3. (์•„๋ž˜ ๋ช…๋ น์–ด๋กœ) ํŒจํ‚ค์ง€ ์„ค์น˜ํ•˜๊ธฐ (in ๊ฐ€์ƒํ™˜๊ฒฝ)

$ poetry add [package-name]

 

์ด ๊ฒฝ์šฐ, ์ถ”๊ฐ€ํ•œ ํŒจํ‚ค์ง€&๋ฒ„์ „์€ pyproject.toml ํŒŒ์ผ ์•ˆ์˜ [tool.peotry.dependencies] ์•„๋ž˜์— ์ ํžŒ๋‹ค.

7๊ฐœ์˜ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

[TIP]

[๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ ๊ทธ๋•Œ๊ทธ๋•Œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜์‹œ] add ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

add๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜(์ถ”๊ฐ€)ํ–ˆ๋‹ค๋ฉด ํ•ด๋‹น ํŒจํ‚ค์ง€&๋ฒ„์ „์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

BUT

[๋งŒ์•ฝ ์ด๋ฏธ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ, ๋˜๋Š” ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ „์ฒด ํŒจํ‚ค์ง€&๋ฒ„์ „์„ pyproject.toml ํŒŒ์ผ๋กœ ๊ณต์œ  ๋ฐ›๋Š”๋‹ค๋ฉด]

์•„๋ž˜์˜ ๋ช…๋ น์–ด๋กœ pyproject.toml ํŒŒ์ผ์— ์ ํ˜€์žˆ๋Š” ํŒจํ‚ค์ง€&๋ฒ„์ „์„ ํ•ด๋‹น ๊ฐ€์ƒํ™˜๊ฒฝ์— ์„ค์น˜ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅด๋‹ค.

$ poetry update
or
$ poetry lock

poetry update ๋ช…๋ น์–ด๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋ฅผ ๋ฒ„์ „ ์ง€์ •ํ•ด์„œ ์„ค์น˜ํ•˜๋Š” ๋ชจ์Šต

(์ถ”๊ฐ€ ๋‚ด์šฉ)

'poetry lock'์™€ 'poetry update'์˜ ์ฐจ์ด์ ์€?

๋‘˜ ๋‹ค Python ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ์ธ Poetry๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

1. 'poetry lock' ๋ช…๋ น์€ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ๊ณ ์ •์‹œํ‚ค๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
Poetry๋Š” 'pyproject.toml' ํŒŒ์ผ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

'poetry lock' ๋ช…๋ น์€ 'pyproject.toml' ํŒŒ์ผ์— ๋ช…์‹œ๋œ ์˜์กด์„ฑ ๋ฒ„์ „์„ 'poetry.lock' ํŒŒ์ผ์— ๊ณ ์ •์‹œํ‚จ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ ์žฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ฐฐํฌํ•  ๋•Œ ์ •ํ™•ํ•œ ์˜์กด์„ฑ ๋ฒ„์ „์ด ์‚ฌ์šฉ๋œ๋‹ค.

2. 'poetry update' ๋ช…๋ น์€ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด 'pyproject.toml' ํŒŒ์ผ์—์„œ ์ •์˜๋œ ์˜์กด์„ฑ์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  'poetry.lock' ํŒŒ์ผ๋„ ๊ฐฑ์‹ ๋œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

์ฃผ์˜ํ•  ์ : ์˜์กด์„ฑ์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์˜์กด์„ฑ ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฉฐ, ๋•Œ๋กœ๋Š” ์—…๋ฐ์ดํŠธ ํ›„์— ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

poetry๊ฐ€ ์‹คํ–‰๋˜๋ฉด poetry.lock ํŒŒ์ผ์ด ์ƒ๊ธด๋‹ค.

 

4-4. (์•„๋ž˜ ๋ช…๋ น์–ด): ํŒจํ‚ค์ง€ ์‚ญ์ œํ•˜๊ธฐ

$ poetry remove [package-name]

 


โญ๏ธ ์•„๋ž˜ ๋‚ด์šฉ์€ ์ปด๋ฐ”์ปด ์ผ ๊ฒƒ ๊ฐ™๋‹ค!!!! ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋งŒ ์ฐธ๊ณ ํ•˜๊ธฐ! ๐Ÿ˜‰

์œ„์˜ ๋‚ด์šฉ๋Œ€๋กœ

๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ํŒจํ‚ค์ง€๋“ค์„ poetry ์ด์šฉํ•ด์„œ install(add, ์„ค์น˜)ํ–ˆ๋Š”๋ฐ๋„

์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ import fastapi โฌ…๏ธ ์— warning ๋˜์–ด์žˆ๊ณ ,

'Import "fastapi" could not be resolved' ๋ผ๊ณ  ๋‚˜์˜จ๋‹ค๋ฉด?!?!

โ€ผ๏ธ ์ด์œ ๋Š”: python interpreter๊ฐ€ fastapi๋ฅผ ์žก์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค.

python ์„ค์ •์„ ๋‹ค์‹œ ํ•ด์ค˜์„œ fastapi(๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋กœ) ์ž˜ ์žก๋„๋ก ํ•ด์ฃผ์ž!

 

 

1. $ poetry env info : ํ˜„์žฌ ๊ฐ€์ƒํ™˜๊ฒฝ์˜ python Path๊ฐ€ ์–ด๋””์ธ์ง€ ํ™•์ธํ•œ๋‹ค.

2. (์—๋””ํ„ฐ๊ฐ€ vsc์ธ ๊ฒฝ์šฐ) ํ•˜๋‹จ์˜ python-interpreter๊ฐ€ ์œ„์˜ 1๋ฒˆ์— ๋‚˜์˜จ virtualenv-path๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก(์„ ํƒ,selectํ•˜๋„๋ก) ๋ฐ”๊ฟ”์ค„ ๊ฒƒ์ด๋‹ค. ์•„๋ž˜ ์‚ฌ์ง„์˜ Select Interpreter ๋ฅผ ์„ ํƒํ•œ๋‹ค.

python interpreter๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ select interpreter๋ฅผ ์„ ํƒํ•œ๋‹ค.

3. (์—๋””ํ„ฐ๊ฐ€ vsc์ธ ๊ฒฝ์šฐ) ์—๋””ํ„ฐ์˜ ์œ„์ชฝ์— ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค. ํ˜„์žฌ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” python path๋Š” '~/.pyenv/versions/3.10.9/bin/python' ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ fastapi, pydantic ๋“ฑ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ ๊ฐ€์ƒํ™˜๊ฒฝ(local python)์˜ path๋Š” ๊ทธ ์•„๋ž˜์— ์žˆ๋Š” '~/.pyenv/versions/3.10.9/envs/fastapi-blog/bin/python' ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋‘๋ฒˆ์งธ ์นœ๊ตฌ๋ฅผ ์„ ํƒํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

4. ๊ทธ๋Ÿฌ๋ฉด ํ•˜๋‹จ์˜ python-interpreter ์ด๋ฆ„๋„ ๋ฐ”๋€Œ๊ฒŒ ๋˜๊ณ , import ํ•ด์ค€ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋“ค๋„ warning ์—†์ด ์ž˜ ๊ฐ€์ ธ์™€์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

๊ฐœ๋ฐœํ™˜๊ฒฝ์„ธํŒ…! ์ด์ œ ์™„์ „ ๋!!!!!

์‹œ์ž‘์ด ์ ˆ๋ฐ˜์ด๋ผ๊ตฌ,,,! ์ด์ œ ์ ˆ๋ฐ˜ํ–ˆ์œผ๋‹ˆ๊นŒ ๋‚˜๋จธ์ง€ ์ ˆ๋ฐ˜(๊ฐœ๋ฐœ+์ด์Šˆํ•ด๊ฒฐ+๋ฐฐํฌ)๋„ ํ™”์ดํŒ…!!!!!๐Ÿ”ฅ