서두
python 으로 프로젝트를 시작 할 때, 각 프로젝트마다 사용하는 파이썬 버전과 패키지가 다르기 때문에 가상환경을 사용하는 것은 필수이다. 만약 가상환경을 사용하지 않고 /usr/bin/python3
에 패키지를 깔기 시작하면 굉장히 피곤한 일들이 벌어지게 된다. 이 때, pyenv 를 사용하면 손쉽게 파이썬 버전 격리와 패키지 격리를 할 수 있게 된다!(엄밀히 말하면 격리는 pyenv로 하는건 아닙니다. 실습에서 확인 가능합니다) 그래서 pyenv 의 아주 기초적인 것들을 정리해 보았다.
pyenv
pyenv는 다양한 파이썬 버전을 관리하는데 유용한 도구이다. (진짜 엄청 좋아요..)
자세한 내용은 공식문서를 참조하기 바란다.
설치 및 설정
먼저 pyenv를 설치해야 하는데 mac에서는 굉장히 쉽게 설치가 가능하다 (윈도우는 죄송합니다...;;)
$ brew install pyenv
(pyenv를 설치)
$ brew install pyenv-virtualenv
(pyenv-virtualenv는 나중에 뒤에서 사용 할 텐데 미리 설치해 두자)
이렇게 해서 설치가 완료 되었으면, 사용할 수 있도록 pyenv 관련 설정을 쉘 설정 파일에 추가해야 한다. 각자가 사용하는 쉘에 따라 bash
는 ~/.bash_profile
혹은 ~/.bashrc
에, zsh
은 ~/.zshrc
에 하기의 명령어들을 추가하도록 하자
export PYENV_PATH=$HOME/.pyenv
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
이제 쉘에서 pyenv
라고 치면 사용 가능한 명령어 목록이 출력될 것이다. (안되면 터미널 껏다 켜보세요! 설정 파일이 읽히지 않았을 수도..) 아직 끝나지 않았다. 파이썬을 설치하기 전 필요 필요한 패키지들이 있다. pyenv 버전에 따라 설치해야 하는 패키지 목록이 바뀔 수 있으니 이 부분은 아래 명령어를 쳐도 안된다면 각자 확인이 필요하다.
$ brew install readline xz
사용법
이제 아래의 명령어들을 따라하면서 pyenv를 사용해보자.
1. 설치 가능한 패키지들 확인
$ pyenv install --list
(이렇게 하면 굉장히 많은 버전이 나오는데, 만약 3.8.x를 설치하고 싶다면 아래 명령어로 확인하자)
$ pyenv install --list | grep 3.8.
2. 설치 및 설치 확인
$ pyenv install 3.8.13
(실제 설치)
$ pyenv versions
* system
3.8.13 (설치 된 파이썬 환경 확인)
pyenv versions를 입력하면 *
이 붙은 항목이 현재 사용되고 있는 파이썬 버전이다. 처음에는 system 으로 되어 있는데, OS에 깔린 python을 사용하고 있다는 뜻이다. 주의할 점은 which python
을 쳐보면 /usr/bin/python3
이 나올 수도 있는데, 이는 아직 pyenv 를 사용하고 있지 않고, OS에 깔린 python 을 사용하고 있다는 뜻이다.(쉘 설정 파일에서 설정이 안 읽혔거나, 잘못 기입한 경우 등등..)
3-1. pyenv 실습
아래의 실습에서는 쉘 스크립트 파일이 잘못 기입되었다고 가정하고, pyenv를 init 하고 실습하겠다. (내부 동작 원리 이해를 위해서 한번 따라 해보심을 추천드립니다!)
$ which python3
/usr/bin/python3 (python 실행 시 OS 에 원래 깔려있던 버전이 사용됨)
$ python --version
3.8.9 (python 실행 시 OS 에 원래 깔려있던 버전이 사용됨)
$ eval "$(pyenv init -)"
(pyenv 시작)
$ which python3
/Users/user/.pyenv/shims/python3 (이제 python 명령어를 shims 디렉토리 아래서 가져다 쓰는 pyenv 쪽으로 python 설정이 바뀐 것으로 알 수 있다)
$ pyenv global 3.8.13
(이전에 깔았던 3.8.13 버전을 사용할 것을 명령, 참고로 다시 which python3 를 쳐도 이와 동일한 위치를 바라보는데, 이는 실제 사용 될 곳을 링크(?)해서 사용한다)
$ pyenv which python3
/Users/user/.pyenv/versions/3.8.13/bin/python3 (이제 python 명령어를 쳤을 때는, 실제로 이 경로의 python 이 실행되는 상태가 된 것!)
$ pyenv which pip
/Users/user/.pyenv/versions/3.8.13/bin/pip (마찬가지로, 이 경로의 pip 이 실행된다!)
3-2. 실습 시 주의 할점
만약 쉘 설정 파일에 제대로 기입이 되지 않은 상태로, 쉘을 다시 실행한 경우 pyenv 가 실행되지 않아서 OS 의 파이썬이 사용될 수도 있다. 아래 예시는 쉘을 다시 실행 시켜서 이전에 pyenv 는 3.8.13 을 사용하도록 되어있지만, 실제로는 pyenv가 실행되지 않은 상태여서 python 3.8.9가 실행되는 경우를 설명한다.
$ pyenv versions
system
* 3.8.13
$ python --version
Python 3.8.9 (pyenv 의 * 마크는 3.8.13 에 되어있지만, 실행되지 않았기 때문에 실제로는 3.8.9가 실행된다)
$ which python3
/usr/bin/python3
$ eval "$(pyenv init -)"
(실행)
$ python --version
3.8.13
$ which python
/Users/user/.pyenv/shims/python3 (이제는 pyenv 를 통해 설정된 python 을 실행한다.)
4. 가상환경 생성
아래의 예시는 터미널을 다 끄고 다시 시작했다고 가정(pyenv 미실행 상태)하고 실습한다.
$ python --version
3.8.9 (OS 기본)
$ python -m venv local_version
(-m 은 모듈의 약자로 python 모듈을 커멘드로 실행할 때 사용한다. 즉, venv 모듈을 사용하여 local_version이라는 가상환경을 만들겠다는 의미)
$ source local_version/bin/activate
(가상환경 실행)
(local_version) $ python --version
3.8.9
$ deactivate
(가상환경 사용 중지)
$ eval "$(pyenv init -)"
$ python global 3.8.13
$ python --version
3.8.13 (이제는 python 명령어 사용 시, pyenv의 3.8.13 버전이 사용된다.)
$ python -m venv pyenv_version
$ source pyenv_version/bin/activate
(pyenv_version) $ python --version
3.8.13 (pyenv 를 사용해 3.8.13 버전의 가상환경이 생성됨)
$ deactivate
5. pyenv-virtualenv 사용한 가상환경 세팅
위의 방식으로 사용하고 싶은 버전의 python 을 pyenv 로 설정하고, python -m venv <가상환경명> 을 사용해 보았다면 아마 pyenv에 대한 이해가 되었을 것이다. 이제는 더 쉽게 pyenv-virtualenv 을 이용해 가상환경을 생성하고, 폴더에 접속하면 바로 해당 가상환경이 사용 되도록 설정해보자.
명령어 : pyenv virtualenv <version> <virtualenv_name>
$ cd pyenv_test_folder
$ pyenv versions
(가상환경 생성 시 사용할 버전을 확인)
$ pyenv install 3.8.11
(실습을 위해 새로운 버전 설치)
$ pyenv virtualenv 3.8.11 test-env
(3.8.11 버전으로 생성)
$ pyenv virtualenvs
3.8.11/envs/test-env (created from /Users/user/.pyenv/versions/3.8.11)
test-env (created from /Users/user/.pyenv/versions/3.8.11)
(virtualenvs 명령어를 통해 생성된 가상환경 확인)
$ pyenv versions
system
* 3.8.13
3.8.11
3.8.11/envs/test-env
test-env
$ pyenv local test-env
현재 폴더에 특정 가상환경(test-env)을 적용
$ pyenv versions
system
3.8.13
3.8.11
3.8.11/envs/test-env
* test-env
(이제는 * 마크가 이전에 3.8.13 에서 test-env 로 바뀐 것을 볼 수 있다. 이는 이 폴더에 local의 명령어로 test-env가 자동 사용되도록 지정했기 때문이다. 만약 다른 폴더로 이동하여 pyenv versions를 확인해보면 * 마크는 다른 곳으로 이동한 것을 확인할 수 있다)
$ python --version
3.8.11 (이 폴더에 들어오면 자동으로 적용된 가상환경의 버전이 사용된다)
$ ls -al
.
..
.python-version
(.python-version 이 숨김파일로 생겼고, cat 을 통해 확인하면 사용되고 있는 가상환경인 test-env가 나온다)
6. 정리
pyenv 와 pyenv-virtualenv를 사용하여 가상환경을 만들고 프로젝트별로 파이썬 버전과 패키지 버전을 관리할 수 있다. pyenv는 쉘 설정 파일에 추가하여 자동 실행되게 할 수도 있고, eval "$(pyenv init -)"
을 사용하여 시작시킬 수도 있다. 시작 되었는지는 which python
으로 확인해보면 shim 디렉토리를 사용하는지를 통해 알 수 있고, virtual-env 를 pyenv local
명령어로 특정 디렉토리에 실행해 놓은 경우는 해당 디렉토리에 들어가면 자동으로 실행된다. 사용 가능한 버전은 pyenv verions
를 통해 확인 가능하고, pyenv install <원하는버전>
을 통해 원하는 버전을 깔고, pyenv global <사용할 버전>
을 통해 사용할 수 있다. 사용할 버전으로 설정이 완료되면 python -m venv <가상환경명>
을 통해 가상환경을 만들수도 있고, pyenv virtualenv <version> <virtualenv_name>
를 사용해 만들 수도 있다.
(저도 처음 써보는거라 부족한 부분이 많은 포스트일 수 있습니다~ 잘못된 곳이 있으면 언제든 댓글로 알려주시고 질문 있으시면 남겨주세요^^)
'IT > python' 카테고리의 다른 글
[python] 패키지관리 (0) | 2023.08.31 |
---|---|
[python - kubernetes] pytorchjob을 활용한 분산 데이터 병렬 처리 기초 (0) | 2023.02.03 |
[python] asyncio 비동기 프로그래밍의 기초 (0) | 2023.01.30 |
[python] 의존성 주입 (Dependency Injection) 기초와 FastAPI (0) | 2023.01.27 |
댓글