πŸ’» λ°±μ—”λ“œ/Flask

ν”ŒλΌμŠ€ν¬(Flask) | μ›Ή κ°œλ°œμ„ μœ„ν•œ 파이썬(Python) 가상 ν™˜κ²½ μ„€μΉ˜

μ˜ˆμ§„-D 2021. 9. 19. 10:30

 

졜근 ν”ŒλΌμŠ€ν¬(Flask)λ₯Ό μ΄μš©ν•œ μ›Ή κ°œλ°œμ„ μ§„ν–‰ν•˜κ³  μžˆμ–΄μ„œ 파이썬 가상 ν™˜κ²½μ„ μ€€λΉ„ν–ˆμŠ΅λ‹ˆλ‹€.

파이썬 가상 ν™˜κ²½μ€ λ‹€μ–‘ν•œ λ²„μ „μ˜ νŒŒμ΄μ¬μ„ 각각 μ‚¬μš©ν•˜κ³  관리할 수 μžˆλ„λ‘ λ…λ¦½λœ ν™˜κ²½μ„ μ œκ³΅ν•΄μ€λ‹ˆλ‹€. 

가상 ν™˜κ²½μ„ μ‚¬μš©ν•˜λ©΄ 제 1 가상 ν™˜κ²½μ—μ„œλŠ” 2.7 버전을, 제2 가상 ν™˜κ²½μ—μ„œλŠ” 3.8, 3.9 버전을 μ‚¬μš©ν•  수 μžˆμ–΄ 정말 νŽΈλ¦¬ν•©λ‹ˆλ‹€!

참고둜 μ €λŠ” macOS와 Windows λͺ¨λ‘ μ‚¬μš©ν•˜κ³  μžˆμ§€λ§Œ κ°œλ°œμ— 주둜 μ‚¬μš©ν•˜λŠ” 것은 macOSμž…λ‹ˆλ‹€.

 

 

 

 

 


가상 ν™˜κ²½ 생성

λ¨Όμ € 가상 ν™˜κ²½μ„ λ§Œλ“€ 폴더λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 직접 파일 κ΄€λ¦¬μžμ—μ„œ 폴더λ₯Ό λ§Œλ“œμ…”λ„ 되고, λ§₯이라면 ν„°λ―Έλ„μ—μ„œ μƒμ„±ν•˜μ…”λ„ λ¬΄κ΄€ν•©λ‹ˆλ‹€. μ €λŠ”project1으둜 μƒμ„±ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

$ mkdir '폴더이름'

μ €λŠ” κ°„λ‹¨νžˆ project1 둜 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. (ex. mkdir project1)

 

 

 

λ‹€μŒμ€ 가상 ν™˜κ²½μ„ λ§Œλ“€μ–΄μ•Ό ν•©λ‹ˆλ‹€. python 2.xλ₯Ό μ‚¬μš©ν•˜κ³  κ³„μ‹œλ©΄ κ·Έλƒ₯ python, python 3.xλ₯Ό μ‚¬μš©ν•˜κ³  κ³„μ‹œλ©΄ python3둜 μž…λ ₯ν•΄μ£Όμ„Έμš”. μ € 같은 경우 python3을 μ‚¬μš©ν–ˆμœΌλ©°, 가상 ν™˜κ²½ 이름은 κ°„λ‹¨ν•˜κ²Œ 제 μ΄λ¦„μœΌλ‘œ ν–ˆμŠ΅λ‹ˆλ‹€. :-)

$ python3 -m venv '가상 ν™˜κ²½λͺ…'

가상 ν™˜κ²½λͺ…μ—λŠ” μ›ν•˜λŠ” 이름을 μ μ–΄μ£Όμ„Έμš”. μ €λŠ” 제 이름을 λ„£μ–΄μ„œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. :-) (ex. python3 -m venv yejinvenv)

생성에 μ„±κ³΅ν–ˆλ‹€λ©΄ μœ„μ—μ„œ λ§Œλ“  폴더 ν•˜μœ„μ— '가상 ν™˜κ²½λͺ…' 이름을 가진 폴더가 μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

 

 

ν˜„μž¬ 폴더 κ΅¬μ‘°λŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€!

tree -d둜 ν™•μΈν•œ 폴더 ꡬ쑰

project1 폴더 ν•˜μœ„μ— 가상 ν™˜κ²½ 폴더 yejinvenv이 μƒμ„±λœ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

 

 


가상 ν™˜κ²½ ν™œμ„±ν™”

이제 μƒμ„±ν•œ 가상 ν™˜κ²½μ— μ§„μž…ν•΄λ΄…μ‹œλ‹€. 가상 ν™˜κ²½μ„ μƒμ„±ν•œ ν΄λ”λ‘œ μ΄λ™ν•œ μƒνƒœμ—μ„œ λ‹€μŒ λͺ…λ Ήμ–΄λ‘œ μ§„μž…ν•©λ‹ˆλ‹€. (macOS)

$ source '가상 ν™˜κ²½λͺ…'/bin/activate

 

 

Windows의 κ²½μš°λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

$ cd '가상 ν™˜κ²½λͺ…'/Scripts/activate

 

μ„±κ³΅μ μœΌλ‘œ 가상 ν™˜κ²½μ— μ§„μž…ν•˜μ…¨λ‹€λ©΄ 터미널에 (가상 ν™˜κ²½λͺ…)이 λΆ™μ–΄ μžˆλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 

 

 

 

 

 

 


ν”ŒλΌμŠ€ν¬ μ„€μΉ˜

가상 ν™˜κ²½μ— μ§„μž…ν•œ μƒνƒœμ—μ„œ ν”ŒλΌμŠ€ν¬λ₯Ό μ„€μΉ˜ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ΄λ•ŒλŠ” 가상 ν™˜κ²½ μœ„μ— μ„€μΉ˜λœ 것이기 λ•Œλ¬Έμ—, 가상 ν™˜κ²½μ—μ„œ λΉ μ Έλ‚˜μ˜€λ©΄ μ„€μΉ˜ν•œ κΈ°λŠ₯을 μ΄μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 

$ pip3 install Flask

$ flask --version

μœ„ λͺ…λ Ήμ–΄λ₯Ό 톡해 ν”ŒλΌμŠ€ν¬λ₯Ό μ„€μΉ˜ν•΄μ£Όμ„Έμš”! 

ν”ŒλΌμŠ€ν¬ μ„€μΉ˜ μ™„λ£Œ!

이제 가상 ν™˜κ²½μ—μ„œ ν”ŒλΌμŠ€ν¬λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

 

 

 

 

 


ν”ŒλΌμŠ€ν¬ μ‚¬μš© 예제

가상 ν™˜κ²½λ„ ν™œμ„±ν™”ν–ˆκ³  ν”ŒλΌμŠ€ν¬λ„ μ„€μΉ˜ν–ˆμœΌλ‹ˆ μ΄μ œλŠ” ν”ŒλΌμŠ€ν¬λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›ΉνŽ˜μ΄μ§€λ₯Ό λ„μ›Œλ΄…μ‹œλ‹€.

ν”„λ‘œμ νŠΈ 폴더(ex. project1)둜 μ΄λ™ν•œ λ’€ app.py νŒŒμΌμ„ μž‘μ„±ν•©λ‹ˆλ‹€. ν„°λ―Έλ„μ—μ„œ 직접 μž‘μ„±ν•΄λ„ 되고, μ—λ””ν„°λ‘œ μž‘μ„±ν•΄λ„ λ©λ‹ˆλ‹€.

# app.py code
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
	return 'Hello, Flask!'

@app.route('/name')
def name():
	return "My name is yejin!"

if __name__ == '__main__':
	app.run(debug=True)

 

app.pyλ₯Ό μž‘μ„±ν•˜μ…¨μœΌλ©΄ ν™˜κ²½λ³€μˆ˜λ₯Ό μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

 

$ export FLASK_ENV=development

$ export FLASK_APP=app.py

FLASK_ENVλ₯Ό development둜 μ„€μ •ν•˜λŠ” μ΄μœ λŠ” 개발 μ„œλ²„μ— development라고 μ•Œλ¦¬μ§€ μ•ŠμœΌλ©΄ production ν™˜κ²½μ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλ‹€λ©° errorλ₯Ό λ±‰μ–΄λƒ…λ‹ˆλ‹€. λ”°λΌμ„œ ν™˜κ²½λ³€μˆ˜λ₯Ό μ„€μ •ν•˜μ—¬ 개발 ν™˜κ²½μ„ ν™œμ„±ν™”ν•΄μ€λ‹ˆλ‹€.

 

 

$ flask run

이후 μ‹€ν–‰ν•΄μ£Όμ‹œλ©΄ μ—¬λŸ¬ ν…μŠ€νŠΈλ“€κ³Ό ν•¨κ»˜ 

Running on '~'κ°€ 좜λ ₯λ˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이제 ν•΄λ‹Ή 링크둜 λ“€μ–΄κ°€ λ³΄μ‹œλ©΄ 

 

 

Hello, Flask!

app.py에 썼던 λ¬Έμžκ°€ 좜λ ₯λ©λ‹ˆλ‹€! λ˜ν•œ 제 이름을 μ μ–΄λ‘μ—ˆλ˜ ~/name 에도 λ“€μ–΄κ°€ 보면

My name is ~

ν…μŠ€νŠΈκ°€ 좜λ ₯된 κ±Έ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

 

 

 

 


가상 ν™˜κ²½ λΉ„ν™œμ„±ν™”

가상 ν™˜κ²½μ—μ„œ κ°œλ°œμ„ ν•˜λ‹€ κΈ°λ³Έ 파이썬 ν™˜κ²½μœΌλ‘œ λŒμ•„μ˜€κΈ° μœ„ν•΄μ„  가상 ν™˜κ²½μ„ λΉ„ν™œμ„±ν™”μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.

$ deactivate

κ°„λ‹¨ν•œ λͺ…λ Ήμ–΄λ‘œ λΉ μ Έλ‚˜μ˜¬ 수 μžˆμŠ΅λ‹ˆλ‹€!