파이썬 개발환경

노요셉·2020년 4월 8일
1
post-thumbnail

파이썬 가상환경.. 먼가..

대표 가상환경 - 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

  • 파이썬에서는 한 라이브러리에 대해 하나의 버전만 설치가 가능하다.
  • 여러개의 프로젝트를 진행하게 되면 이는 문제가 됌. 작업을 바꿀때마다 다른 버전의 라이브러리를 설치해야함.
  • 이를 방지하기 위한 격리된 독립적인 가상환경을 제공합니다.
  • 일반적으로 프로젝트마다 다른 하나의 가상환경을 생성한 후 작업을 시작하게 됩니다.
  • 가상환경의 대표적인 모듈 3가지

venu : python 3.3 버전 이후 부터 기본 모듈에 포함됨.
virtualenv : python 2 버전 부터 사용해오던 가상환경 라이브러리, python 3에서도 사용가능
conda : Anaconda Python을 설치했을 시 사용할 수 있는 모듈
pyenv : pyenv의 경우 python version manage임과 동시에 가상환경 기능을 플러그인 형태로 제공
https://wikidocs.net/16402

내가 선택한 방법

https://art-it.tistory.com/13

mac이니까 홈브루를 통해 설치합니다.

homebrew로 anaconda 설치

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 반영해줍니다.


conda 버전 확인

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. <==

현재 콘다 환경에서 나가기 (base환경에서 나갈 수 있음)

$ 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로 가상환경 만들기

$ conda create -n algo(가상환경이름) (python=3.5 optional) 이렇게 python버전도 정할 수 있나보네요. optional은 써도 되고 안써도 되고 입니다. 안쓰면 디폴트설정으로 될거같아요.

conda create -n algo(가상환경이름) 그냥 이렇게하면 conda기준 최신 python 버전이 설치되나봐요.

conda info로 가상환경 보기

(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

한번 구성한 env를 다음에 또 쓰고싶으면? yml(설정파일)로 내보내고 불러들일 수 있음!

https://velog.io/@tyhlife/%EC%95%84%EB%82%98%EC%BD%98%EB%8B%A4-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD%EC%97%90%EC%84%9C-%EA%B0%9C%EB%B0%9C%ED%95%98%EA%B8%B0

자동으로 콘다 환경 실행되는것 해제하기.

$ conda config --set auto_activate_base false

가상환경, conda, pip 대체 뭔말인지 모르겠다.
아래 블로그 참조하면 좋다.
https://towardsdatascience.com/environments-conda-pip-aaaaah-d2503877884c

결론은 conda로 environments를 만들고 그 안에 pip으로 패키지를 관리하는데
왠만하면 conda > pip 순으로 패키지를 설치하는 것을 권장.
필요한 기능이 conda에서 지원되면 굳이 pip로 패키지 관리할 필요없다는 것

docker로 minconda3 사용해보기

https://docs.anaconda.com/anaconda/user-guide/tasks/docker/

docker 가 설치된 상태에서
miniconda3이미지로 container생성후, bash 쉘로 container내부로 접속해서 바로 cli환경에서 위에 해둔 명령어대로 가상환경 실습을 할 수 있습니다.

docker run -it --name='miniconda' continuumio/miniconda3 /bin/bash

node.js의 package.json, gradle의 build.gradle같은 패키지및 프로젝트 관리 비슷한게 파이썬에 없나?

지금까지 알아본 바로는 conda나 venv같은 가상환경을 구성할수 있는 패키지를 통해서 가상환경을 만들고, pip의 범위를 그 안으로 가둘 수 있는 것 까지 알았다. 그러면 어떻게 export, import 하느냐?

requirement.txt로 pip 패키지를 관리할 수 있고, conda로 구성한 가상환경도 한꺼번에 관리하고싶은데,
yaml파일로 conda가상환경 구성하고, 그 안에 requirement.txt 경로를 넣어주면 됩니다.

https://stackoverflow.com/questions/35245401/combining-conda-environment-yml-with-pip-requirements-txt


pyenv + pyenv virtualenv + intellij

몇번에 시행착오 덕분에 다행히
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

pip 명령어

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

intellij

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

설치한 package list export?

(이미 python virtualenv가 활성화된거에요)
pip freeze > requirement.txt

그러면 배포할때 docker에 말아서 실행할때 npm install 같이 패키지 설치해야될거아니에요?
pip install -r pathto/requirements.txt

https://stackoverflow.com/a/14685017

profile
서로 아는 것들을 공유해요~

2개의 댓글

comment-user-thumbnail
2020년 6월 26일

안녕하세요. 보기 쉬운 설명 감사합니다.. 혹시 이렇게 아나콘다를 설치하는것과 pyenv 안에 아나콘다를 설치하는 차이가 뭔지 여쭤봐도 될까요..?

1개의 답글