Programming/Python

[Python] Mac에서 개발 환경 구축

minarae7 2023. 2. 3. 17:47
728x90
반응형

이직을 하면서 회사에서 Backend 언어로 Python을 기반으로 fastapi를 사용하게 되었다. Python으로 Object detection을 위한 모델 학습하는 코드는 작성해보았지만 웹서비스를 만들어보기는 처음이다.

예전에는 anaconda를 설치해서 가상 환경에서 개발을 진행하였다. 각 환경별로 패키지를 다르게 설치하고 개발을 했다. 근데 이게 가상환경으로 구동되다보니 아무래도 불편했다. 가상환경을 만들어주는 것도 귀찮고 각 가상환경을 activate 했다가 deactivate 하는 명령어를 입력해야 했고 콘솔도 가상환경의 이름이 붙다보니 쓸데없이 길기만 했다.

이번에 이직해서 python개발 환경을 구축하다보니 pyenv라는 것을 사용하였다. anaconda 같이 각 버전별로 가상환경을 만들 수도 있고 여러 버전을 설치해서 필요에 따라서 돌아가면서 사용할 수 있다보니 여러모로 편리한 점이 있는 것으로 보입니다.

그래서 pyenv를 이용해서 python 개발 환경을 구축하는 것을 메모삼아 포스팅해준다.

먼저 Mac에는 기본적으로 python이 설치되어 있다. Mac을 오래 쓰다보니 최초에 설치되어 있던 python 버전은 기억나지 않지만 기억이 맞다면 python은 2.x 버전이고 python3이 따로 설치되어 있어 python 3.x 버전을 사용해도록 했던 것으로 기억한다.

이 버전 싹다 무시하고 pyenv를 설치하고 필요한 버전을 설치하여서 사용하도록 하겠다.

먼저 패키지 설치에 앞서 패키지 관리 프로그램인 brew가 필요하다. brew는 아래 링크에서 설치 방법을 확인할 수 있다.

 

Homebrew

The Missing Package Manager for macOS (or Linux).

brew.sh

해당 패이지에서 있는 명령어를 복사해서 터미널에서 실행하기만 하면 된다.

설치가 되었다면 이제 brew를 통해서 원하는 패키지를 설치할 수 있다. 다음 명령어를 통해서 pyenv를 설치한다.

% brew install pyenv

pyenv-virtualenv라는 패키지도 있지만 이런 가상환경보다는 개인적으로 호스트에서 버전을 바꿔가면서 개발하는 것이 더 좋은거 같다.

위의 명령어를 입력하면 brew가 알아서 의존성이 있는 패키지를 같이 설치해준다.

다음 명령어를 통해서 설치된 pyenv의 버전을 확인할 수 있다.

% pyenv --version
pyenv 2.3.12

 

pyenv를 설치했으니 .zshrc 파일을 열어서 다음의 내용을 추가해준다. 이렇게 해서 터미널이 열릴 때 자동으로 환경 설정을 해주게 된다. 사용하는 shell이 기본이 zsh이기 때문에 .zshrc에 입력하는 것이고 다른 shell을 사용하고 있다면 해당 shell에 맞도록 입력하여야 한다.

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"

다음 명령어를 입력해서 해당 내용을 현재 Shell에 적용한다.

% source ~/.zshrc

이제 pyenv를 사용할 준비가 되었다. 우선 여기서는 3.9를 설치한다. patch 버전을 입력하지 않으면 해당 버전의 가장 최신을 설치하게 된다. 아래에서는 pyenv에서 활용할 수 있는 옵션의 리스트를 출력한다.

# 설치가능한 버전의 리스트를 확인한다.
% pyenv install --list

# 해당 마이너 버전의 가장 최신 패치버전을 설치된다.
% pyenv install 3.9

# 설치된 버전을 삭제한다.
% pyenv uninstall 3.9.16

# 현재 사용 중인 python의 버전을 확인한다.
% pyenv version

# 현재 설치된 python의 버전들을 확인한다.
% pyenv versions

이제 설치한 python을 적용하도록 한다.

# 3.9.16 버전을 활성화 한다.
% pyenv global 3.9.16

# 파이썬의 버전을 확인한다.
% python --version
Python 3.9.16

이제 python을 사용할 준비가 되었다.

그 다음에 프로젝트 관리를 위해서 필요한 패키지를 설치한다. python에서는 pip라는 프로그램을 통해서 사용할 패키지를 설치한다. 하지만 pip를 사용하면 프로젝트 단위로 사용할 패키지를 관리할 수 없다. 이를 보완하기 위해서 poetry라는 패키지 관리 프로그램을 사용할 것이다.

 

Poetry - Python dependency management and packaging made easy

Dependency resolver Poetry comes with an exhaustive dependency resolver, which will always find a solution if it exists. And get a detailed explanation if no solution exists. Isolation Poetry either uses your configured virtualenvs or creates its own to al

python-poetry.org

자세한 설치 방법은 document를 참고하면 된다. 다음 명령어를 입력하면 poetry를 설치할 수 있다.

% curl -sSL https://install.python-poetry.org | python -

이제 개발을 하기 위한 준비를 끝냈다. 다음의 명령어들을 통해서 프로젝트를 초기화할 수 있다.

# 프로젝트를 시작하면서 디렉토리 자체를 생성하는 경우
% poetry new poetry-demo

# 기존 프로젝트에 poetry를 적용하기(프로젝트 root에서 실행)
% poetry init

new를 통해서 프로젝트를 만들면 디렉토리 구조를 만들어준다. init만 하는 경우는 필요한 설정 파일만 생성해준다. 이렇게 하면 pyproject.toml 파일이 생성된다. new 명령어로 프로젝트를 생성하면 다음 이미지와 같이 생성된다.

이제 python을 통해서 개발을 진행할 준비를 마쳤다. 이제 poetry를 통해서 패키지를 관리하면서 개발을 진행할 준비가 되었다.

다음부터는 fastapi를 통해서 기초적인 개발을 시작해보도록 하겠다.

 

Basic usage | Documentation | Poetry - Python dependency management and packaging made easy

Why a nested shell? Child processes inherit their environment from their parents, but do not share them. As such, any modifications made by a child process is not persisted after the child process exits. A Python application (Poetry), being a child process

python-poetry.org

 

728x90
반응형