로컬 환경으로 개발을 하다보면, dependency 충돌이 일어나거나 "내 컴퓨터에서는 되는데 왜 안되지?"
하는 경우가 자주 발생한다.
이런 사태를 미리 방지할 수 있는 방법으로 파이썬을 다루는 개발자는 대부분 위 셋 중 하나를 선택한다.
필자도 개발 환경에 대해서 지식이 많은 편이 아니라 깊게 설명은 못하지만, 파이썬에 입문하는 사람에게 도움이 되었으면 한다.
A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner. - Wikipedia
Virtual environment 의 줄임말
Venv는 필자가 지금까지 써왔던 환경이다. 사용시 가장 쉬웠고 편했다.
그렇지만 단점도 있다고 한다 (아직까지 단점을 마주한 적이 없기 때문에 "있다고 한다"로 표현)
$ python3 -m pip install --user virtualenv
이제 로컬 컴퓨터에 venv가 설치되었다.
$ python3 -m venv your_dir
현재 커맨드 라인 안에 있는 디렉토리에서 your_dir라는 폴더가 생성되고, 그 안에 가상환경이 구축된다.
$ source your_dir/bin/activate
위 커맨드와 함께 터미널 앞에 (venv)같은 괄호가 생길 것이다. 그렇다면 정상적으로 작동된것이다.
필자는 가상환경 디렉토리 자체를 venv로 하는 것을 추천한다.
$ pip3 install XXX
이제 XXX에 원하는 라이브러리를 넣으면 되고, 위 환경이 activate되었을때만 라이브러리를 사용할 수 있다.
예를 들어 pip3 install scikit-learn을 가상환경 안에서 했다면,
로컬 환경에서는 scikit-learn을 불러올 수 없다.
매우 간단하다.
깃헙에 올릴 목적이라면 .gitignore 파일에 환경 디렉토리를 넣어주자. 안그러면 설치한 라이브러리를 모두 깃헙에 올리게 되는 대참사가 발생... (여러번 경험해봤다...)
Pip와 Venv를 합쳐놨다고 생각하면 편하다.
써본적은 없지만, 파이썬을 사용하는 유저의 대부분이 Venv 또는 pipenv를 사용함으로, 디버깅 검색도 나름 편하고, requirements.txt를 만들 필요가 사라진다.
pipenv를 사용하면 Pipfile.lock에 모든 라이브러리 정보가 저장됨으로 패키지 매니징에 편하다.
Python Packaging Authority(PyPA)에서 추천하는 방법이다.
$ pip3 install pipenv
$ pipenv shell
현재 디렉토리에서 가상환경이 생성된다.
$ pipenv install XXX
가상환경에 라이브러리를 설치한다.
설명이 필요 없다. 굉장히 심플하다.
프로젝트가 완성되었다고 판단되거나 라이브러리 설치가 끝난 후
$ pipenv lock
커맨드를 사용해, Pipfile.lock을 만들 수 있다.
자세한 기능은 문헌을 참고하면 좋다. 시작 단계의 독자를 생각한 글임으로 dev, build 환경관련 내용은 생략.
일단 이름이 마음에 든다. 시...
필자가 다음 프로젝트를 위해 사용하려는 방법이다.
Docs를 읽어보면, pipenv와 큰 차이는 없다.
다른점이라면, Pipfile.lock 대신 pyproject.toml파일로 대체한다.
그러나 poetry.lock파일도 있는데, lock 파일은 ultimate source of truth로 간주한다.
$ curl -sSL https://install.python-poetry.org | python3 -
위 커맨드를 터미널에 입력하면, 알아서 설치는 된다.
하지만 설치 완료 후, 아래 커맨드를 입력하면
$ poetry --version
에러가 뜰 것이다.
??
현재 컴퓨터에서 커맨드를 인식하지 못한다. 이유는 $PATH에 없기 때문인데, 추가하는 부분은 간단하고, 여기저기 쓸 곳이 많기 때문에 여기까지 읽었다면, 코린이라도 해보는 것을 추천한다.
$ open ~/.zprofile
터미널에 입력하면 이상한 파일이 뜰 것이다. 만약 없다고 나온다면, 맥 기준 가장 상위 디렉토리로 가서 아래 커맨드를 입려하고 다시 오픈하면 된다.
$ touch .zprofile
그리고 $PATH를 추가하면 된다.
export PATH="/Users/YOUR_USERNAME/.local/bin:$PATH"
이렇게 해도 안된다면, 같은 방법으로
$ open ~/.zshrc
$PATH를 추가해보자.
여기서 YOUR_USERNAME은 사용자에 따라 다름으로, 아예 따라하면 추가되지 않으니 유의!
그리고 나서 다시 poetry --version 을 입력하면 인식 할 것이다.
설치는 끝났는데 그럼 라이브러리는 어떻게 설치하나??
$ poetry init
그러면 toml파일을 만들어주고 이것저것 물어볼 것이다.
특별한건 없음으로, 다 엔터치면 된다.
필자는 마지막 두 질문, interactively? 에서 no를 했다
뭘 하려는지 몰라서 그랬다.
라이브러리 설치는
$ poetry add XXX
이제 라이브러리 설치도 끝났다. 그리고 toml파일을 열어보면 라이브러리 정보가 나와서 재밌을 것이다.
이런식으로 나온다.
이후 기능은 아직 사용해보지 않았다.
근본: venv
쉽게: pipenv
새로운: poetry
venv가 근본이라고 하기엔 반대도 많을 것 같지만, 파이썬을 입문하면 대부분 venv에서 시작하기에 이렇게 적었다.
긴 글 읽어주셔서 감사합니다.