관리 메뉴

Doby's Lab

μ•„λ‚˜μ½˜λ‹€ 말고 λ‹€λ₯Έ 가상 ν™˜κ²½μ€ μ—†μ„κΉŒ? (venv) λ³Έλ¬Έ

Code about AI/Python

μ•„λ‚˜μ½˜λ‹€ 말고 λ‹€λ₯Έ 가상 ν™˜κ²½μ€ μ—†μ„κΉŒ? (venv)

도비(Doby) 2024. 5. 11. 13:40

πŸ€” Problem

일반적으둜 AI ν”„λ‘œμ νŠΈλ₯Ό μ‹œμž‘ν•˜κΈ° μœ„ν•œ μ„ΈνŒ…μ„ κ³ λ €ν•  λ•Œ, κ·Έ μš”μ†Œλ“€ 쀑 ν•˜λ‚˜μΈ 가상 ν™˜κ²½μ„ κ³ λ €ν•˜κ²Œ λ©λ‹ˆλ‹€.

μ™œλƒν•˜λ©΄, λ‘œμ»¬μ— μ„€μΉ˜λ˜μ–΄ μžˆλŠ” μ–΄λŠ νŒ¨ν‚€μ§€κ°€ ν”„λ‘œμ νŠΈλ§ˆλ‹€ μš”κ΅¬ν•˜λŠ” 버전이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— μ΄λŸ¬ν•œ μΆ©λŒμ„ λ°©μ§€ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ 가상 ν™˜κ²½μ„ ν•„μš”λ‘œ ν•©λ‹ˆλ‹€.

 

κ·Έλž˜μ„œ, μ–Όλ§ˆ μ „κΉŒμ§€λŠ” condaλ₯Ό ν™œμš©ν•œ 가상 ν™˜κ²½μœΌλ‘œ ν”„λ‘œμ νŠΈλ₯Ό κ΅¬μ„±ν•˜κ³  λ§Œλ“€μ–΄ μ™”μ§€λ§Œ, μ˜λ„μΉ˜ μ•Šμ€ λ¬Έμ œλ“€μ΄ λ°œμƒν•˜κ³  이λ₯Ό μ™„μ „νžˆ ν•΄κ²°ν•˜λŠ” 것은 λ‹€λ₯Έ λ°©μ‹μ˜ 가상 ν™˜κ²½μ„ κ³ λ €ν•΄μ•Ό ν•΄κ²°ν•  수 μžˆκ² λ‹€λŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

 

μš°μ„ , condaλ₯Ό μ‚¬μš©ν–ˆμ„ λ•Œ 였히렀 νŒ¨ν‚€μ§€ 관리에 의문이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€. ν™˜κ²½μ„ μƒˆλ‘œ νŒŒμ„œ μž‘μ—…μ„ ν•˜κ³  μžˆλ‹€ 보면, '이건 λ‹€μš΄λ‘œλ“œν•œ 적이 μ—†λŠ”λ° μ™œ 싀행이 되고 μžˆμ§€?'와 같은 μ΄μƒν•œ ν˜„μƒμ΄ λ‚˜νƒ€λ‚¬μ—ˆμŠ΅λ‹ˆλ‹€.

 

λ¬Όλ‘ , 이것이 제 ν”„λ‘œμ νŠΈλ₯Ό μ‹€ν–‰ν•˜λŠ” 것 μžμ²΄μ—λŠ” λ¬Έμ œκ°€ λ˜μ§€ μ•Šκ² μŠ΅λ‹ˆλ‹€λ§Œ, 좔후에 κΉƒν—ˆλΈŒμ™€ 같은 원격 μ €μž₯μ†Œμ— requirements.txtλ₯Ό μ˜¬λ €λ‘˜ λ•Œ, μ •ν™•ν•œ 정보λ₯Ό 아카이빙 ν•΄λ‘λŠ” 것이 아닐 μˆ˜λ„ μžˆλŠ” λ¬Έμ œκ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€.

 

λ˜ν•œ, 개인적으둜 λŠλ‚€ λ‚œμž‘ν•¨μΈλ° conda에 μ—†λŠ” νŒ¨ν‚€μ§€λ₯Ό λ‹€μš΄λ‘œλ“œν•  λ•ŒλŠ” pip둜 λ”°λ‘œ λ‹€μš΄μ„ λ°›μ•„μ•Ό ν•˜λŠ” κ²½μš°λ“€λ„ μ’…μ’… μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜κ³ μž μƒˆλ‘œμš΄ 가상 ν™˜κ²½μ„ νƒμƒ‰ν•˜λ‹€κ°€ λ°œκ²¬ν•œ 파이썬 κΈ°λ³Έ λ‚΄μž₯ 라이브러리 venv에 λŒ€ν•΄μ„œ μ‚¬μš©ν•˜λŠ” 방법과 μ»¨λ²€μ…˜(?)을 기둝해두렀고 ν•©λ‹ˆλ‹€.


πŸ˜€ venv 가상 ν™˜κ²½ 라이브러리

venvλŠ” μœ„μ—μ„œ λ§ν•œ κ²ƒμ²˜λŸΌ νŒŒμ΄μ¬μ—μ„œ 기본적으둜 μ œκ³΅ν•˜κ³  μžˆλŠ” κ°€μƒν™˜κ²½ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. 사싀 이걸 μ•Œκ²Œ λ˜μ—ˆμ„ λ•Œ, μ—¬λŸ¬ 글듀을 μ½μ–΄λ³΄λ©΄μ„œ λŠλ‚€ 건 '뭐야, λ‚˜λ§Œ λͺ°λžλ‚˜?'λΌλŠ” 생각이 λ“€ μ •λ„λ‘œ λ‹€λ“€ 이 라이브러리λ₯Ό μ‚¬μš©ν•˜μ‹œλŠ” κ±° κ°™μ•˜μŠ΅λ‹ˆλ‹€. (κ³΅λΆ€ν•˜λ©΄μ„œ μ—¬λŸ¬ 리포지토리에 있던 .venv 같은 디렉토리λͺ…듀이 κΈ°μ–΅ μ†μ—μ„œ μŠ€μ³κ°€λ”κ΅°μš”... λ‚˜λ§Œ λͺ°λžμ–΄.)

 

κ·Έλž˜μ„œ venvλ₯Ό ν†΅ν•΄μ„œ 가상 ν™˜κ²½μ„ λ§Œλ“œλŠ” 방법, ν™œμ„±ν™”/λΉ„ν™œμ„±ν™” 방법, μΌμ’…μ˜ μ»¨λ²€μ…˜(?)을 μ•Œμ•„λ³ΌκΉŒ ν•©λ‹ˆλ‹€.

1️⃣ 가상 ν™˜κ²½μ„ λ§Œλ“œλŠ” 방법

μ—„μ²­ κ°„λ‹¨ν•©λ‹ˆλ‹€. μ•„λž˜μ˜ λͺ…령을 μ›ν•˜λŠ” μœ„μΉ˜μ—μ„œ μ‹€ν–‰μ‹œμΌœ μ£Όλ©΄ λ©λ‹ˆλ‹€.

python -m venv [가상 ν™˜κ²½ 이름]

μ €λŠ” .venvλΌλŠ” μ΄λ¦„μœΌλ‘œ 가상 ν™˜κ²½μ„ λ§Œλ“œλŠ” 것을 μ„ ν˜Έν•˜κ²Œ λ˜μ—ˆλŠ”λ°, μ΄μœ λŠ” κΉƒν—ˆλΈŒμ— 아카이빙을 ν•  λ•Œ .gitignore둜 올릴 νŒŒμΌλ“€μ„ 관리λ₯Ό ν•˜κ²Œ λ˜λŠ”λ°, μ΄λ•Œ '.'으둜 μ‹œμž‘ν•˜λŠ” νŒŒμΌλ“€μ˜ 관리가 μš©μ΄ν•  κ±° κ°™μ•„ 쒋은 μ»¨λ²€μ…˜μ΄λΌ μƒκ°ν–ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

μ•„λ¬΄νŠΌ μœ„μ™€ 같이 .venvλΌλŠ” μ΄λ¦„μ˜ 가상 ν™˜κ²½μ„ μƒμ„±ν•˜λ©΄, ν•΄λ‹Ή μœ„μΉ˜μ— μ•„λž˜ κ·Έλ¦Όκ³Ό 같은 가상 ν™˜κ²½ 디렉터리가 μƒκΈ°κ²Œ λ©λ‹ˆλ‹€.

.venv(가상 ν™˜κ²½) 디렉터리

2️⃣ 가상 ν™˜κ²½μ„ ν™œμ„±ν™”/λΉ„ν™œμ„±ν™”ν•˜λŠ” 방법

πŸ’» ν™œμ„±ν™”

이제 μ΄λŸ¬ν•œ 가상 ν™˜κ²½μ„ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ ν™œμ„±ν™”λ₯Ό μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.

[가상 ν™˜κ²½ 이름]\Scripts\activate

이것도 크게 어렡지 μ•ŠμŠ΅λ‹ˆλ‹€. μœ„μ™€ 같이 μƒμ„±λœ 가상 ν™˜κ²½μ˜ 디렉터리 내뢀에 activate νŒŒμΌμ„ μ‹€ν–‰μ‹œν‚€κΈ°λ§Œ ν•˜λ©΄, μ•„λž˜μ™€ 같이 가상 ν™˜κ²½μ΄ ν™œμ„±ν™”λœ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

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

정말 이게 독립적인 ν™˜κ²½μ΄ λ§žλŠ”μ§€ ν™•μΈν•˜λ €λ©΄, pip listλ₯Ό ν†΅ν•΄μ„œ ν˜„μž¬ μ„€μΉ˜λ˜μ–΄ μžˆλŠ” νŒ¨ν‚€μ§€λ₯Ό 확인해 보면 λ©λ‹ˆλ‹€. μ•„λ‹ˆλ©΄, pip freezeλ₯Ό ν†΅ν•΄μ„œ 더 raw ν•œ νŒ¨ν‚€μ§€ 리슀트λ₯Ό 좜λ ₯ν•΄ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

(ν•΄λ‹Ή κΈ€μ—μ„œλŠ” 식별할 수 μžˆλ„λ‘ pip listλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.)

pip list

ν˜„μž¬ μ„€μΉ˜λ˜μ–΄ μžˆλŠ” νŒ¨ν‚€μ§€λ₯Ό ν™•μΈν•˜μ—¬, μ™„μ „νžˆ 독립적인 ν™˜κ²½μ΄λΌλŠ” 것을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€.

πŸ’» λΉ„ν™œμ„±ν™”

λΉ„ν™œμ„±ν™” λͺ…λ Ήμ–΄λŠ” μ•„λž˜μ™€ 같이 κ°„λ‹¨ν•©λ‹ˆλ‹€.

deactivate

3️⃣ 이 가상 ν™˜κ²½μ˜ μœ„μΉ˜λŠ” 어디에 두어야 ν• κΉŒ?

μœ„ 흐름을 ν†΅ν•΄μ„œ 가상 ν™˜κ²½μ΄ λ””λ ‰ν„°λ¦¬λ‘œ 관리가 λ˜λŠ” 것을 ν™•μΈν–ˆμŠ΅λ‹ˆλ‹€. 그러면, '이 디렉터리λ₯Ό 어디에 μœ„μΉ˜μ‹œμΌœμ•Ό ν•˜λŠ”κ°€?'κ°€ λ¬Έμ œμž…λ‹ˆλ‹€.

 

λ‹Ήμ—°νžˆ 이 뢀뢄에 λŒ€ν•΄μ„œλŠ” 정닡이 μ—†μŠ΅λ‹ˆλ‹€. ν™œμ„±ν™”/λΉ„ν™œμ„±ν™”λ₯Ό ν•  수만 μžˆλ‹€λ©΄, 였λ₯˜μ™€ 같은 λ¬Έμ œλŠ” μ—†κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€. κ·Έλž˜μ„œ 이와 κ΄€λ ¨ν•˜μ—¬ μ‚¬λžŒλ“€μ΄ μ΄μ•ΌκΈ°ν•˜λŠ” 것 쀑 κ°€μž₯ μ €μ—κ²Œ 섀득λ ₯이 μžˆμ—ˆλ˜ 포럼의 λ‚΄μš©μ„ κ°€μ Έμ™”μŠ΅λ‹ˆλ‹€.

https://www.reddit.com/r/Python/comments/au904b/where_and_how_do_all_of_you_place_your_virtual/

 

From the Python community on Reddit

Explore this post and more from the Python community

www.reddit.com

ν•΄λ‹Ή κΈ€μ—μ„œλŠ” μš°λ¦¬κ°€ 일반적으둜 ν”„λ‘œμ νŠΈλ₯Ό 아카이빙 ν•  λ•Œ, κ°€μƒν™˜κ²½μ€ μ˜¬λ¦¬μ§€ μ•Šμ§€λ§Œ μ•„λž˜ λͺ…령을 ν†΅ν•΄μ„œ requirements.txtλ₯Ό μΆ”μΆœν•˜μ—¬ μ˜¬λ¦°λ‹€κ³  ν•©λ‹ˆλ‹€.

pip freeze > requirements.txt # μΆ”μΆœ
pip install -r requirements.txt # μ„€μΉ˜

이에 λŒ€ν•΄ 'requirements.txtκ°€ ν”„λ‘œμ νŠΈ 폴더 λ‚΄λΆ€(λ°”λ‘œ μ•„λž˜)μ—μ„œ 관리가 되고 μžˆμœΌλ‹ˆ 가상 ν™˜κ²½λ„ 같은 μœ„μΉ˜(ν”„λ‘œμ νŠΈ ν•˜μœ„ 폴더)μ—μ„œ 관리λ₯Ό ν•˜λ©°, 이λ₯Ό .gitignoreλ₯Ό 톡해 λ¬΄μ‹œν•˜λ©΄ λ˜μ§€ μ•ŠλŠλƒ? λ‚œ 그게 κ°€μž₯ νŽΈν•˜λ”λΌ'λΌλŠ” λ‰˜μ•™μŠ€μ˜ μ˜κ²¬μ„ λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

이 말이 κ°€μž₯ 섀득λ ₯ 있고, κ΄€λ¦¬ν•˜κΈ° 쉽닀고 νŒλ‹¨ν•˜μ—¬ 저도 μ•žμœΌλ‘œλŠ” 가상 ν™˜κ²½μ„ ν”„λ‘œμ νŠΈ 폴더 λ‚΄λΆ€(λ°”λ‘œ ν•˜μœ„)μ—μ„œ ν•˜λ‚˜μ”© 관리λ₯Ό ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

둜컬 μ €μž₯μ†Œμ˜ ν”„λ‘œμ νŠΈ ꡬ쑰 (원격 μ €μž₯μ†Œ X)

4️⃣ 가상 ν™˜κ²½ μ‚­μ œ

rmdir을 μ“°λ©΄, μ•ˆμ— λ‚΄μš©μ΄ λΉ„μ–΄μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ•ˆμ— μžˆλŠ” λ‚΄μš©κΉŒμ§€ μ „λΆ€ μ‚­μ œν•˜λ €λ©΄ /s μ˜΅μ…˜μ„ λ„£μ–΄μ£Όλ©΄ λ©λ‹ˆλ‹€. (일반 디렉터리λ₯Ό μ‚­μ œν•˜λŠ” κ³Όμ •κ³Ό κ°™μŠ΅λ‹ˆλ‹€.)

rmdir /s [가상 ν™˜κ²½ 이름]

πŸ“‚ Reference

https://www.codingmax.net/labs/lab00001

 

파이썬 가상 ν™˜κ²½ venv의 λͺ¨λ“  것!

venv둜 파이썬 가상 ν™˜κ²½μ„ λ§Œλ“€κ³  μ‚¬μš©ν•˜λŠ” 방법을 λ‹€λ£Ήλ‹ˆλ‹€.

www.codingmax.net

https://www.reddit.com/r/Python/comments/au904b/where_and_how_do_all_of_you_place_your_virtual/

 

From the Python community on Reddit

Explore this post and more from the Python community

www.reddit.com

 

728x90