파이썬 가상환경.. 먼가..
대표 가상환경 - venv, virtualenv, conda
python에서 가상환경이란?
가상환경(Virtual Environments)이란 자신이 원하는 Python 환경을 구축하기 위해 필요한 모듈만 담아 놓는 바구니라고 생각하면 됩니다.
굳이 바구니로 담아야하는가?
즉 위 사진 상단의 Python Virtual Envs처럼 각 가상환경(virtualenv1, 2, 3…)은 독립적으로 관리됩니다. 각 모듈은 다른 모듈에 대한 의존성(dependency)이 다르기 때문에 마구잡이로 설치하다보면 이유 모를 충돌이 날 수도 있습니다. 따라서 각 프로젝트 별로 별개의 가상환경을 만들어놓고 사용하는 것이 정신 건강에 좋습니다.
결국 충돌
모듈간 의존성이 달라서 충돌
때문에 프로젝트마다 가상환경 만들어서 사용하는게 정신건강에 좋다네요.
https://medium.com/@psychet_learn/python-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD-a87fc6e4d12b
venu : python 3.3 버전 이후 부터 기본 모듈에 포함됨.
virtualenv : python 2 버전 부터 사용해오던 가상환경 라이브러리, python 3에서도 사용가능
conda : Anaconda Python을 설치했을 시 사용할 수 있는 모듈
pyenv : pyenv의 경우 python version manage임과 동시에 가상환경 기능을 플러그인 형태로 제공
https://wikidocs.net/16402
mac이니까 홈브루를 통해 설치합니다.
homebrew 패키지(프로그램)을 설치해주는 도구(프로그램)입니다.
터미널 열고 다음 명령어 입력해줍니다.
brew cask install anaconda
(brew가 설치 되어있어야 겠죠.)
solarconnect-yosephnoh ~ brew cask install anaconda
Updating Homebrew...
...
🍺 anaconda was successfully installed! <-설치 된거겠죠.
conda --version
'zsh: command not found: conda <- 이거 뭐지? 설치했는데 무슨소리야..
검색 좀 해보니까 brew cask install
로 설치하면
/usr/local/anaconda3
로 설치됩니다. 설치될때
PREFIX=/usr/local/anaconda3라고 분명히 나옵니다.
command not found는 환경변수에 프로그램 경로가 설정안되서 명령어를 쳐도 운영체제는 뭔소리냐하는거겠죠.
그러면 환경변수를 설정하기위해 경로를 ~/.zsrhrc
에 추가해주면 됩니다. (전 zsh를 사용합니다. bash의 일종입니다.) bash도 뭐냐 하시면 마우스말고 키보드로 명령어 쳐서 (CLI환경이라 하죠) 프로그램 실행하게 해주는 프로그램이라고 보면 됩니다.
mac에서 터미널 실행해서 vi ~/.zshrc
복붙하시고,
편집창으로 들어가시면 맨 아래 다음과 같이 붙여주고 저장해줍니다.
편집 끝나고, source ~/.zshrc
반영해줍니다.
solarconnect-yosephnoh ~ conda --version
conda 4.8.2
잘 나오죠.
$ conda info --envs
# => 기본으로 설치한 base 만 보일 것임.
solarconnect-yosephnoh ~ conda info --envs
# conda environments:
#
base * /usr/local/anaconda3
✘ solarconnect-yosephnoh ~ conda deactivate
CommandNotFoundError: Your shell has not been properly configured to use 'conda deactivate'.
To initialize your shell, run
$ conda init <SHELL_NAME>
Currently supported shells are:
- bash
- fish
- tcsh
- xonsh
- zsh
- powershell
See 'conda init --help' for more information and options.
IMPORTANT: You may need to close and restart your shell after running 'conda init'.
conda init를 하라니까 해봅니다.
✘ solarconnect-yosephnoh ~ conda init
no change /usr/local/anaconda3/condabin/conda
no change /usr/local/anaconda3/bin/conda
no change /usr/local/anaconda3/bin/conda-env
no change /usr/local/anaconda3/bin/activate
no change /usr/local/anaconda3/bin/deactivate
no change /usr/local/anaconda3/etc/profile.d/conda.sh
no change /usr/local/anaconda3/etc/fish/conf.d/conda.fish
no change /usr/local/anaconda3/shell/condabin/Conda.psm1
no change /usr/local/anaconda3/shell/condabin/conda-hook.ps1
no change /usr/local/anaconda3/lib/python3.7/site-packages/xontrib/conda.xsh
no change /usr/local/anaconda3/etc/profile.d/conda.csh
modified /Users/solarconnect-yosephnoh/.bash_profile
==> For changes to take effect, close and re-open your current shell. <==
$ conda deactivate
# 생성한 콘다 환경 시작하기
$ conda activate 환경이름(생략시 base 시작됨)
Proceed ([y]/n)? y
설치가 완료되면 아래와 같은 메세지가 나온다
(base) solarconnect-yosephnoh ~ conda create -n algo
Collecting package metadata (current_repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.8.2
latest version: 4.8.3
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /usr/local/anaconda3/envs/algo
Proceed ([y]/n)? y
Preparing transaction: done
Verifying transaction: | WARNING conda.core.path_actions:verify(963): Unable to create environments file. Path not writable.
environment location: /Users/solarconnect-yosephnoh/.conda/environments.txt
done
Executing transaction: - WARNING conda.core.envs_manager:register_env(52): Unable to register environment. Path not writable or missing.
environment location: /usr/local/anaconda3/envs/algo
registry file: /Users/solarconnect-yosephnoh/.conda/environments.txt
done
#
# To activate this environment, use
#
# $ conda activate algo
#
# To deactivate an active environment, use
#
# $ conda deactivate
$ conda create -n algo(가상환경이름) (python=3.5 optional)
이렇게 python버전도 정할 수 있나보네요. optional은 써도 되고 안써도 되고 입니다. 안쓰면 디폴트설정으로 될거같아요.
conda create -n algo(가상환경이름)
그냥 이렇게하면 conda기준 최신 python 버전이 설치되나봐요.
(algo) solarconnect-yosephnoh ~ conda info
active environment : algo
active env location : /usr/local/anaconda3/envs/algo
shell level : 2
user config file : /Users/solarconnect-yosephnoh/.condarc
populated config files :
conda version : 4.8.2
conda-build version : 3.18.11
python version : 3.7.6.final.0
$ conda config --set auto_activate_base false
가상환경, conda, pip 대체 뭔말인지 모르겠다.
아래 블로그 참조하면 좋다.
https://towardsdatascience.com/environments-conda-pip-aaaaah-d2503877884c
결론은 conda로 environments를 만들고 그 안에 pip으로 패키지를 관리하는데
왠만하면 conda > pip 순으로 패키지를 설치하는 것을 권장.
필요한 기능이 conda에서 지원되면 굳이 pip로 패키지 관리할 필요없다는 것
https://docs.anaconda.com/anaconda/user-guide/tasks/docker/
docker 가 설치된 상태에서
miniconda3이미지로 container생성후, bash 쉘로 container내부로 접속해서 바로 cli환경에서 위에 해둔 명령어대로 가상환경 실습을 할 수 있습니다.
docker run -it --name='miniconda' continuumio/miniconda3 /bin/bash
지금까지 알아본 바로는 conda나 venv같은 가상환경을 구성할수 있는 패키지를 통해서 가상환경을 만들고, pip의 범위를 그 안으로 가둘 수 있는 것 까지 알았다. 그러면 어떻게 export, import 하느냐?
requirement.txt로 pip 패키지를 관리할 수 있고, conda로 구성한 가상환경도 한꺼번에 관리하고싶은데,
yaml파일로 conda가상환경 구성하고, 그 안에 requirement.txt 경로를 넣어주면 됩니다.
몇번에 시행착오 덕분에 다행히
pyenv + pyenv virtualenv + intellij로 구성하였다.
miniconda로 파이썬 구성하지말고 node.js의 nvm처럼 대응되는 python의 pyenv
brew로 설치
brew update
brew install pyenv
pyenv repository
https://github.com/pyenv/pyenv
brew install pyenv-virtualenv
pyenv-virtualenv repository
https://github.com/pyenv/pyenv-virtualenv
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init --path)"
fi
내용을 ~/.zprofile에 추가해주고,
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
내용을 ~/.zshrc 에 추가해주면 됌.
To enable auto-activation add to your profile:
if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi
출처: https://github.com/pyenv/pyenv/issues/1906
https://pip.pypa.io/en/stable/cli/pip/
pip -V
로 현재 pip 이 설치된 위치를 볼 수 있음
가상환경에 설치된 패키지는 어디있어?
/Users/mac/.pyenv/versions/<가상환경이름>/lib/python3.8/site-packages
pyenv virtualenvs 로 생성한 virtualenv를 확인할 수 있는데
envtest라는 이름으로 가상환경을 만들었다면?
버전/envs/envtest가 나오고
envtest가 나올텐데
envtest는 버전/env/envtest의 바로가기이다.
심볼릭 링크라고 한다.
https://qjadud22.tistory.com/22
cmd + ,
: Intellij Preferences
Plugins에 python 검색해서 설치해주세요.
그리고 IDE restart
대충 pyenv-virtualenv intellij
이런식으로 검색하면
https://www.jetbrains.com/help/idea/creating-virtual-environment.html
다음과 같은 url로 갈것이고 비슷하게 설정할 것이다.
그러나 그렇게 설정하면
venv로 구성하게 된 것임.
지금까지 ㅠㅠ 해본결과 ( 쉬운 방법있으면 알려주세요 ㅠㅠ )
$ pyenv virtualenv <파이썬버전> <가상환경이름>
으로 구성하여 하든
pyenv global <파이썬버전>
또는 pyenv local <파이썬버전>
으로
특정 파이썬 버전을 활성화해준후
pyenv virtualenv <가상환경이름>
가상환경 구성할 수 있다.
pyenv-virtualenv: `3.8.5' is not installed in pyenv.
이런 에러가 발생하면 pyenv install 3.8.5로 파이썬 설치해주세요.
이제
cmd + ;
Project Structure > Platform Settings > SDKs > + 버튼 누르시면 이제 add new python interpreter가 보일꺼고, /Users/mac/.pyenv/versions/<파이썬 가상환경이름!>/bin/python3.X
선택해줍니다.
Virtualenv Environment에서 Existing environment 선택해주고
interpreter는
/Users/mac/.pyenv/versions/<파이썬 가상환경이름!>/bin/python3.X
를 선택해줍니다.
python3.X는 설치한 버전에 따라 바뀔 수 있어요.
공식문서에서는 New environment로 생성하는 방법알려주는데 이러면 venv방식으로 가상환경 구성되요..
구성한 결과는 요렇답니다.
출처: https://towardsdatascience.com/python-environment-101-1d68bda3094d
참조:
https://github.com/pyenv/pyenv-virtualenv
intellij랑 pycharm하고 거진 비슷하기 때문에 모르면 동영상 보세용
https://www.youtube.com/watch?v=y38xtN1-fkM
pyenv virtualenvs
명령시 활성화된 가상환경이 맞는지 확인해보고
project open하면 끝남
참고 블로그 : https://towardsdatascience.com/python-environment-101-1d68bda3094d
(이미 python virtualenv가 활성화된거에요)
pip freeze > requirement.txt
그러면 배포할때 docker에 말아서 실행할때 npm install 같이 패키지 설치해야될거아니에요?
pip install -r pathto/requirements.txt
안녕하세요. 보기 쉬운 설명 감사합니다.. 혹시 이렇게 아나콘다를 설치하는것과 pyenv 안에 아나콘다를 설치하는 차이가 뭔지 여쭤봐도 될까요..?