엄범

 

pyenv / venv / virtualenv / conda 비교

pyenv

macos만 지원. 했었는데 요즘은 어떤지 모르겠네.

 

venv

  • python에서 기본 모듈로 지원
  • docs.python.org/ko/3/tutorial/venv.html  
  • python에 딸려 있는 모듈이라서 현재 시스템에 설치되어 있는 버전의 python을 기반으로 패키지 가상화 환경 제공
  • 그니까 다른 버전을 쓰고 싶다면 그 버전을 일단 설치해서 python해당버전 -m venv

```

python3 -m venv {venv_path}

```

 

virtualenv

  • -p 옵션으로 파이썬 버전을 지정할 수 있는데, 현재 시스템에 설치되어 있는 파이썬 경로를 입력해야 하는거라서 결국 venv와 똑같다.
    • 그니까, 새로운 버전의 파이썬을 알아서 설치해주는 기능은 없다.
  • 전역으로 virtualenv가 설치되어 있다면 그 virtualenv를 통해서 다른 버전의 python 환경도 만들 수 있기는 해서 venv보다 조금 낫기는 하다.
    • 물론 실행파일은 다 로컬에 설치되어 있어야 하고

 

옵션을 안주면 아예 패키지 없는 환경이 설치되고,

``--system-site-packages``옵션을 주면 시스템에 설치되어 있는 패키지들이 virtualenv에도 설치된다.

```bash

$ virtualenv {venv_name} -p python3

보통 ~/.virtualenvs/{venv_name} 에 설치하는게 관리하기 깔끔

```

 

conda

  • 애초에 python에 종속적인 모듈이 아니라서 python 버전 별 설치 가능함!
    • 64bit conda에서도 32bit python 사용이 가능함! 아래 참조
  • conda를 쓸 수 있으면 이거 쓰는게 제일 나은 듯.
  • 가상환경 경로는 `` \Anaconda3\envs\{name}`` 에 생성됨

 

```python

# 전체 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

```

 

설치 시 환경변수 등록

```

\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 같은걸 ``py python -m``안쓰고 그냥 사용가능하다는 점.

단점은 버전을 지정해 사용할 python은 `` mklink`` 명령어로 같은 폴더 내에 symlink를 생성하거나, 그냥 복붙하거나 해서 다른 이름을 지정(python38.exe) 해줘야 한다는 점

* 끝에 반드시 `` .exe``를 붙여주어야 한다. 실행할 때는 `` .exe``없이 실행한다.

 

 

*** python 특성 상 패키지 뿐만 아니라 버전도 다양하게 설치 및 관리해야 하는 니즈가 있을텐데, 이 때 python, pip 같은 이름을 모두 다르게 버전별로 설정하기가 번거롭다.

 

결론은 그냥 가상 환경 사용하는 것으로...