파이썬 프로젝트를 진행하다보면 가상환경을 이용하는 것은 필수입니다. 왜냐하면, 어떤 프로젝트에서는 python3.1, tensorflow1.9 버전이 잘 맞고, 어떤 프로젝트에서는 python3.7, tensorflow2.1 버전이 잘 맞고 하는 등 상황에 따라 많이 다르기 때문입니다. 그래서 프로젝트에 따라 가상환경을 달리 설정해서 진행하는 것이 좋습니다. global 환경에서 여러 프로젝트를 진행하다가는 큰 낭패를 볼 수 있습니다.
오늘은 파이참(pycharm) 통합개발환경(IDE)에서 venv로 가상환경을 만드는 법에 대해 다루도록 하겠습니다. 참고로 저는 윈도우 10 컴퓨터에 맞춰 설명을 진행할 것입니다.
1. 가상환경 생성
새 가상환경을 생성하기 위해서는 파이참IDE 하단에 있는 Terminal에 들어가서 다음과 같이 명령해줍니다.
> python -m venv 가상환경이름
저는 example_env라는 이름으로 가상환경을 만들어보겠습니다.
이렇게 명령하면, example_env라는 이름의 하위 디렉토리가 생성됩니다. 가상환경이 생성되었다는 뜻입니다.
참고로 test_env라는 가상환경은 예전에 만들었던 가상환경입니다.
global 환경에서 설치했던 패키지들은 좌측에 있는 External Libraries -> <Python 3.7> -> site-packages 에서 확인하실 수 있습니다. 물론 pip list로 terminal에 명령을 내릴 수도 있고요.
그러면 새롭게 만든 가상환경에는 어떤 패키지들이 설치되어 있을까요? 그것을 확인하시려면 example_env 디렉토리에 들어가서 Lib -> site-packages를 확인하시면 됩니다.
새롭게 만든 가상환경에는 pip 등 아주 간단한 패키지들만 설치되어 있음을 알 수 있습니다. 가상환경을 만들면 이렇게 분명히 다른 장소에 저장되어 있는 패키지들을 가지고 작업을 진행합니다. 따라서 버전 충돌 문제를 피할 수 있는 것입니다.
2. 가상환경 활성
가상환경을 만들었다고 무조건 가상환경에서 작업을 하는 것이 아닙니다. 가상환경을 활성시켜줘야지, global 환경에서 벗어나 가상환경에서 작업을 진행합니다. 가상환경을 활성화하기 위해서는 example_env 디렉토리 안에 있는 Scripts 디렉토리 내 activate.bat 파일을 실행시켜줘야 합니다.
먼저 현재 작업 디렉토리를 example_env로 옮기겠습니다.
> cd example_env
잘 이동했죠? 그 다음에는 Scripts 내 activate.bat을 실행시키겠습니다.
> Scripts\activate.bat
가상환경이 활성화되었습니다. 앞에 (example_env)라는 표시가 생겼죠? example_env라는 가상환경에 들어왔다는 뜻입니다. 그러면 다시 pip list를 명령해보겠습니다.
global 환경과 달리 단 두개의 패키지만 이 가상환경에는 설치되어 있음을 알 수 있습니다.
3. 패키지 설치
이 활성화된 가상환경에 opencv 패키지를 설치해보겠습니다. 패키지를 설치할 때는 터미널에 다음과 같이 명령해줍니다.
> pip install 패키지이름
저는 opencv 패키지를 설치해야 하므로 pip install opencv-python을 명령해주겠습니다.
잘 설치되었고요. example_env 가상환경 내에 설치된 패키지 목록에 변화가 생겼는지 pip list로 확인해보겠습니다.
opencv-python을 설치했는데 numpy 패키지도 함께 설치된 것을 확인할 수 있습니다. 왜냐하면 opencv-python 패키지는 numpy 패키지를 필요로 하기 때문입니다. 그래서 저절로 함께 설치된 것입니다. 이와 같이 어떤 패키지를 설치하다보면 동시에 그 패키지를 실행하기 위해 필요한 여러 다른 패키지들도 설치되곤 합니다.
4. 간단한 예제 코드 실행
이제 이 가상환경에서 간단한 예제코드를 실행해보겠습니다. 방금 설치한 opencv 패키지를 활용하겠습니다. 컬러이미지를 읽어서 그레이스케일 이미지로 변환하는 예제입니다. 먼저 example_env 디렉토리 내에 example.py라는 파일을 하나 생성하겠습니다. 그리고 동일한 디렉토리에 컬러이미지 파일을 하나 넣어 주겠습니다. 다음과 같이 파일들이 위치해있어야 합니다.
그리고 example.py에는 다음과 같은 코드를 복사해서 붙여줍니다.
1
2
3
4
5
6
7
8
9
10
|
import cv2
img = cv2.imread('test.jpg', cv2.IMREAD_COLOR)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 컬러 이미지를 그레이스케일 이미지로 변환
cv2.imshow('color', img)
cv2.imshow('gray', gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
|
cs |
그러면 위 파이썬 스크립트를 실행시키겠습니다. 그러면 다음과 같이 컬러 이미지와 그레이 스케일 이미지가 보여질 것입니다. 잘 되셨나요?
5. 만약 내가 짠 코드를 누군가 다른 사람이 쉽게 실행하도록 도우려면
방금 실행한 예제를 누군가 다른 사람도 실행하고 싶어할 수 있겠죠? 그러면 동일하게 패키지들을 설치해줘야합니다. 이때 내가 설치한 패키지를 그 사람도 설치하게 도와주는 방법이 있습니다. 터미널에 다음과 같이 명령해보세요.
> pip freeze > requirements.txt
그러면 example_env 디렉토리에 requirements.txt라는 메모장 파일이 하나 생성됩니다. 열어보면 다음과 같은 내용이 담겨있습니다.
보시다시피, 제가 설치한 패키지들이 나열되어 있습니다. 정확한 버전까지 명시되어 있고요.
저는 새로운 가상환경을 만들어서 거기에서 이 파일을 가지고 패키지들을 한번에 설치해보도록 하겠습니다. 물론 지금의 경우는 패키지 숫자가 적어서 하나씩 직접 설치해줘도 되지만, 설치해야할 패키지들이 많을 경우에는 이렇게 해주는 것이 좋습니다.
일단 지금 활성화되어 있는 example_env를 비활성화시키겠습니다. Scripts 내 deactivate.bat을 실행하면 됩니다.
> Scripts\deactivate.bat
example_env 가상환경을 빠져나갔습니다. 앞에 있던 (example_env)가 사라졌죠? 이번에는 example1_env라는 이름의 새 가상환경을 만들겠습니다. 그 전에 상위 디렉토리로 이동하겠습니다.
> cd ..
> python -m venv example1_env
만들어진 가상환경을 활성화시키겠습니다. 그 전에 example1_env 디렉토리로 이동하겠습니다.
> cd example1_env
> Scripts\activate.bat
활성화되었고, 이제 아까 생성한 requirements.txt를 이용해 패키지들을 설치해보겠습니다. requirements.txt를 example1_env 디렉토리로 복사해서 넣어주세요. 우선 현재 활성화되어 있는 example1_env 가상환경에 설치되어 있는 패키지들의 리스트를 살펴보면 다음과 같습니다.
requirements.txt를 이용해서 패키지들을 설치할 때 필요한 명령은 다음과 같습니다.
> pip install -r requirements.txt
위 명령을 줬더니, 다음과 같이 패키지들이 잘 설치되었습니다.
pip list로 확인해보니, 아까 example_env에 설치된 패키지들과 동일하죠?
이제 제가 실행했던 예제를 문제없이 실행할 준비가 된 것입니다. 물론 python의 버전도 영향을 줄 수 있으니 맞춰주는 것이 좋습니다.
오늘 살펴볼 내용은 여기까지입니다. 질문과 지적은 거침없이 해주시기 바랍니다. 제가 소개해드린 내용이 부분적으로 잘못되었을 수도 있으니 잘못된 것이 있다면 꼭 알려주시기 부탁드리며 글을 맺겠습니다.
관련 글
☞ [Anaconda+python] 꼭 알아야할 conda 명령어 정리
참고자료
[1] dojang.io/mod/page/view.php?id=2470, 파이썬 코딩도장, "47.11 가상환경 사용하기"
(이 글은 2021-7-13에 마지막으로 수정되었습니다.)
'Dev > python' 카테고리의 다른 글
[flask+jinja2] 행 개수 세기, 문자열 길이 산출하기, length 필터 (0) | 2020.12.18 |
---|---|
[python] 튜플의 값을 바꿔주려면? 리스트로 변환한 후 다시 튜플로 (0) | 2020.12.14 |
[flask+jinja2] 중복되는 html 처리, {% include %} 사용 (6) | 2020.12.09 |
[python] 리스트들의 교집합 찾기(set 활용) (0) | 2020.12.07 |
[flask] flask로 웹 어플리케이션 만들기 (코로나19 오늘 확진자 수 알림) (0) | 2020.10.08 |
[python] 소수(prime number) 구하기, primePy 모듈 활용 (8) | 2020.10.07 |
[python] playsound 모듈로 음악 재생하기 (2) | 2020.10.06 |
[python] 오늘의 코로나 확진자수 스크레이핑하기 (Beautiful Soup 활용) (0) | 2020.10.05 |