(Python) 파이썬 버전, 패키지 관리
뭘 쓰든 한가지 방법으로 통일해서 관리하는게 좋음.
pyenv / venv / virtualenv / conda 비교
pyenv
- windows는 지원 안함.
- python 버전 관리를 위해 쓰는거라. 특정 버전에 종속적인게 아니다. brew install …
- python 자체 버전 관리를 위해 사용.
- 따라서 패키지 관리는 virtualenv 등과 연계해서 사용해야 한다.
- pyenv 하위로 virtualenv를 사용할 수 있다. (이게 좀 더 낫다.)
- pyenv-virtualenv를 사용하는 방법이 에러로 불가한 경우?
- python 버전은 pyenv로 관리하고, 해당 python 버전의 venv 모듈로 가상환경 만들면서 [python + 패키지]를 가상환경으로 묶는 방법을 사용해도 된다.
venv
- python에서 기본 모듈로 지원
- docs.python.org/ko/3/tutorial/venv.html
- python에 딸려 있는 모듈이라서 현재 시스템에 설치되어 있는 버전의 python을 기반으로 패키지 가상화 환경 제공
- 그니까 다른 버전을 쓰고 싶다면 그 버전을 일단 설치해서 python해당버전 -m venv
1
python3 -m venv {venv\_path}
virtualenv
- -p 옵션으로 파이썬 버전을 지정할 수 있는데, 현재 시스템에 설치되어 있는 파이썬 경로를 입력해야 하는거라서 결국 venv와 똑같다.
- 그니까, 새로운 버전의 파이썬을 알아서 설치해주는 기능은 없다.
- brew 이용해서 virtualen를 전역으로 virtualenv 설치한 경우 그 virtualenv를 통해서 다른 버전의 python 환경도 만들 수 있기는 해서 venv보다 조금 낫기는 하다.
- 물론 실행파일은 다 로컬에 설치되어 있어야 하고
옵션을 안주면 아예 패키지 없는 환경이 설치되고, --system-site-packages
옵션을 주면 시스템에 설치되어 있는 패키지들이 virtualenv에도 설치된다.
1
2
3
$ virtualenv {venv\_name} -p python3
보통 ~/.venv/{venv\_name} 에 설치하는게 관리하기 깔끔
conda
- 애초에 python에 종속적인 모듈이 아니라서 python 버전 별 설치 가능함
- 64bit conda에서도 32bit python 사용이 가능함! 아래 참조
- 가상환경 경로는
\Anaconda3\envs\{name}
에 생성됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 전체 python 버전 보기
conda search python
### python 32bit 가상환경 사용하고 싶다면 아래 환경변수 세팅
$set CONDA_FORCE_32BIT=1
# 가상환경 생성
conda create -n {name} python=3.9.0
# 가상환경 목록
conda info -e
conda activate {name}
conda deactivate
# 아예 conda 기본 파이썬 버전을 변경하기
conda install python=x.x.x
conda list pyqt
conda update pyqt
최근엔 pipenv, poetry를 많이 사용하는 듯.
설치 시 환경변수 등록
1
2
3
\anaconda3
\anaconda3\Scripts
\anaconda3\Library\bin
- 세 개 모두 등록해야 이상 없이 실행된다.
- \Library\bin을 빼먹는 경우 인증서 dll을 찾을 수 없어서 그런지 pip를 쓰건, conda search를 쓰건, requests를 쓰건 SSL 통신이 들어가는 순간 SSLError가 발생하거나, condaHTTPerror 같은게 발생한다.
- github.com/conda/conda/issues/8273
가상환경 사용 안하고 로컬에서 python2와 python3 같이 사용하기
일단 제일 추천하는건 가상환경 사용하는 것임. 이렇게 로컬에서 여러 버전 관리하면 애매한 순간이 생긴다.
Python 설치하고 환경변수 추가하지 않은 상태에서 가상환경으로 python 실행파일 지정해서 사용하는 방법.
1. system32에 등록하는 방법
리눅스에서 하듯 python3.8 같은 이름으로 system32에 symlink 넣어두는 방법이 있는데 그나마 낫다.
단점은 모듈이 환경변수에 등록이 안되어 직접 사용이 불가능하기 때문에 모듈이 위치한 경로로 직접 가서 python -m module
해야 하고 나중에 지우기도 번거롭다는 점.
2. 각 python 설치 경로를 PATH 환경 변수에 등록해주는 방법
%PythonPath%
라는 별도 항목 따고 이걸 PATH에 추가
환경변수는 앞에서 부터 참조하므로, 기본으로 사용할 python root path를 먼저 위치시키고, 버전을 지정해 사용할 python root path를 그 다음에 위치시킨다.
장점은 Scripts 폴더도 추가하면 pip 같은걸 python -m
안쓰고 그냥 사용가능하다는 점.
단점은 버전을 지정해 사용할 python은 mklink
명령어로 같은 폴더 내에 symlink를 생성하거나, 그냥 복붙하거나 해서 다른 이름을 지정(python38.exe) 해줘야 한다는 점
끝에 반드시
.exe
를 붙여주어야 한다. 실행할 때는.exe
없이 실행한다.
python 특성 상 패키지 뿐만 아니라 버전도 다양하게 설치 및 관리해야 하는 니즈가 있을텐데, 이 때 python, pip 같은 이름을 모두 다르게 버전별로 설정하기가 번거롭다.
결론은 그냥 가상 환경 사용하는 것으로…