사실 나는 부전공인 산업공학과 과제를 할 때 말고는 (전공필수과목 프로래밍언어 과제할 때 쓰긴 했으나... 그건 파이썬을 도구로써 사용했을 뿐이지 파이썬 활용에 대한 경험을 넓힐만한 공부는 아니었다. 적어도 나에겐...) 파이썬을 써 본 적이 몇 번 없다.
그것도 그냥 객체지향에 대한 개념만 있으면 함수만 몇 개 짜는 식으로 쉽게 진행되는 과제였기에 파이썬 지식은 0이라고 볼 수 있겠다.
하지만 파이썬을 쓸 때 마다 느낀 것은 이 친구가 진짜 C/C++이랑은 비교도 안되게 친절하다는 것...
여담으로, 알고리즘 수업 프로젝트를 진행할 때 교수님께서 파이썬을 써도 괜찮다고 하셨는데 그때 고집부리면서 C/C++로 코드를 짜면서 폭죽처럼 터지는 메모리를 수습하느라 정말 고생했던 기억이 있다. (정말 많은 개념적인 설명을 건너뛴다면) '언어의 특성'상 C/C++은 연산 속도가 굉장히 빠르고, 파이썬은 코드를 짜기가 상대적으로 쉽지만, 상대적으로 연산이 매우 느리다. 그래서 나는 코드를 짜는 과정은 파이썬을 사용한 다른 친구들보다 고생했지만, 결과적으로 더 큰 인풋을 훨씬 빠르게 실험해서 보고서를 쓸 수 있었다. 그런데 교수님께서는 그 부분에 있어서 딱히 차등을 안두셨다는... 슬픈 이야기 ^^
어쨌든 파이썬을 최대한 활용해서 이런 저런 기능을 수행하는 봇을 뚝딱뚝딱 만드는 것을 목표로 기초부터 차근차근 쌓아보려고 한다.
#가상환경, Virtual Environment
우선 가상환경이 등장한 배경을 이해해 보도록 하겠다.
파이썬으로 프로그래밍을 할 때 pip 커맨드라인을 통해 패키지를 다운받아서 사용한다.
다양하고 매우 유용한 패키지들을 사용할 수 있는 것이 파이썬의 정말 큰 장점이기도 한데, (예를들면 pandas, tensorflow, 등)
pip를 통해 다운받은 패키지들은 같은 디렉토리에 저장된다. 그렇게 '글로벌'한 환경에서 패키지를 사용할 수 있게 되는 것이다. 다시말해, 다운받아두면 내가 진행할 프로젝트 여기저기서 쓸 수 있다는 것이다.
문제상황
여기서 문제는, 내가 다운받은 패키지를 사용하는 프로젝트들이 여러개인데, 그 패키지의 버전별로 호환성이 달라지는 상황에서 발생한다.
예를들어, 프젝1에서는 패키지 A의 5.3 버전을 사용해야되고, 프젝2에서는 4.18 버전을 사용해야 되는데 (진짜 그냥 숫자 막 갖다 붙인 예시임) 이런 경우 충돌이 발생하기 때문.
해결방안
이 문제에 대한 해결책이 바로 가상환경이다. 쉽게 생각해서 프로젝트 별로 필요한 패키지를 버전에 맞게 담아갈 바구니를 만들어 주는 것이다. 즉, 독립된 공간을 만들어주는 것이다.
#가상환경 설정방법
가상환경 설정 방법도 여러가지가 있다.
그 중에서 가장 간단하고 직관적이라고 생각되는 것을 소개해보겠다 : virtualenv
* MacOS 를 사용하고 있음을 참고해주시길 바랍니다.
* >> 는 터미널에서 명령어를 입력하는 것을 의미합니다.
[1] virtualenv 설치
>> pip install virtualenv
[2] virtualenv 를 사용하여 가상환경 디렉토리 만들기
>> virtualenv nameofdirectory

'nameofdirectory'에 원하는 가상환경 디렉토리 이름을 설정할 수 있다.
[3] 가상환경 실행하기
>> source nameofdirectory/bin/activate

가상환경을 실행한다. 앞에 '(가상환경이름)' 이 생긴 것을 확인 할 수 있다.
이제 이 환경 안에서 필요한 패키지를 설치하면 된다.
>> pip install [package]
필요한 패키지를 설치하면 이 디렉토리 안에만 독립적으로 설치된다.
가상환경 종료하기
>> deactivate

virtualenv 는 직관적이고, 간단하다는 장점이 있지만 built-in python이 갖춰져 있어야 (버전에 맞게) 한다는 단점이 있다.
만약에 파이썬 버전을 다르게 하는 가상 환경을 구축하고 싶다면 virtualenv가 아닌 다른 방법을 사용하는 것이 좋다고 한다.
이 외에 정말 많이 쓰이는 가상환경 구축 tool에는 anaconda가 있다.
하지만... 묵직하다는 (기본적으로 함께 설치되는 친구들이 많다) 단점이 있다.
그래도 설치는 해뒀지만 사용법 정리는 (적어도 이 게시글에서는) 하지 않으려고 한다.
*오개념 지적 대환영*
'CS' 카테고리의 다른 글
| CS_Memory Hierarchy (0) | 2020.12.03 |
|---|---|
| interval (0) | 2020.11.27 |