파이썬 모듈 설치
Virtualenv 로 가상 환경을 만들었다면, 프로젝트가 필요로 하는 모듈들을 설치해야 합니다. 지난 글에서 이미, Pip 를 사용하면 대부분의 모듈들을 손쉽게 설치할 수 있음을 확인했습니다. 하지만 두 가지 이유에서 파이썬 모듈 설치법을 다시 살펴보아야 할 필요가 있습니다.
- 가끔 단순한 Pip 명령어만으로는 설치되지 않는 모듈들이 있습니다.
- 지금 시작하고 있는 프로젝트를 설치하는 방법이 필요합니다.
현재 파이썬에서 모듈을 설치하는 표준적인 방법은 “Installing Python Modules” 라는 문서에서 정의하고 있습니다.
요점은 배포 판을 다운로드 받아 푼 후에, 그 안에 들어있는 setup.py
를 실행하라는 것입니다.
python setup.py install
이 문서가 다루는 내용은 C 라이브러리를 사용하는 확장 모듈들을 컴파일하고 설치하는 작업들을 포함하고, 기타 설치 환경에 따른 다양한 이슈들을 다루고 있습니다만, 당장 저희에게 필요한 부분은 이 것뿐입니다.
Virtualenv 로 만들어진 가상 환경에서 실행한다면, 격리된 공간에 설치되게 됩니다. 개발 환경에서뿐만 아니라, 최종 실행 환경에서도 가상 환경을 사용하면 모듈 의존성 관리가 편리해집니다.
PEP–453
표준 설치법을 Pip 로 변경하자는 제안이 PEP–453으로 올라와 있고, 2014년 초에 릴리즈 될 Python 3.4 에 포함될 가능성도 있습니다.
하지만 이 제안도 부트스트래핑에 관한 내용인데, 저희는 이미 virtualenv 설치 절차를 통한 부트스트래핑을 마련해 둔 상태라 별로 영향 받을 부분이 없습니다. 또 PEP–453 이 수용된다고 하더라도 setup.py
를 사용하는 방법은 여전히 동작할 것이기 때문에, 이 글에서는 setup.py
에만 집중하면 되겠습니다.
Distutils
setup.py
를 통한 설치는 표준 라이브러리에 포함된 Distutils 모듈을 통해 지원됩니다. 하지만 Distutils 가 제공하는 기능에 불만을 갖고 있는 개발자들이 많고, 저희가 설치한 Setuptools 를 포함해 Distribute 나 Distutils2 등의 프로젝트들이 Distutils 의 대안으로 등장했습니다. 이 중 Distribute 는 Setuptools 에 통합되었기 때문에, 현재는 Setuptools 와 Distutils2 가 경쟁하고 있습니다.
미래는 Distutils2 에게 열려있는 것으로 보입니다. 파이썬 3.3 표준 라이브러리에 Distutils2 가 packaging
이라는 이름으로 들어오는 듯 했습니다만 연기되었고, 아직 파이썬 3.4 계획에는 등장하지 않고 있습니다.
Distutils2 에 한쪽 귀를 열어두기는 하겠지만, 당장은 Virtualenv, Setuptools, Pip 의 조합에 집중하겠습니다.
당면 과제는 setup.py
를 만들어 저희 프로젝트를 표준적인 방법으로 설치가 가능하도록 만드는 것입니다.
setup.py
Distutils 를 이용한 setup.py
는 이렇습니다.
from distutils.core import setup
setup(
name='Flowdas-Books',
version='0.1',
description='Flowdas Books',
author='Flowdas',
author_email='spammustdie@flowdas.com',
packages=[
'flowdas',
'flowdas.books',
'flowdas.books.management',
'flowdas.books.management.commands',
'mysite',
],
scripts=['manage.py'],
)
description
, author
, author_email
등의 뻔한 메타데이터 외에 중요한 것들을 살펴보면 이렇습니다.
setup()
setup.py
는 Distutils 에서 제공하는 함수 setup()
을 호출하는 것이 전부입니다. 인자로 각종 설정을 넘겨주면, 사용자가 명령행으로 전달하는 명령이나 옵션들에 따라 적절한 기능을 제공합니다.
name
name
은 패키지를 재사용하려고 할 경우 다른 패키지들과 겹치지 않도록 신경 써서 정해주어야 합니다. 이 패키지를 PyPI 에 등록하려고 한다면 말할 것도 없고, 내부에서 다른 프로젝트와 함께 사용하려고 할 때도 그렇습니다. 대소문자를 구분하지 않고도 항상 구분되는 이름으로 정해주세요.
version
version
역시 주의 깊게 정해주어야 합니다. 버전간의 순서가 중요한데 예를 들어보면 이렇습니다.
1.99 < 2.3 < 2.4a2 < 2.4b1 < 2.4c1 < 2.4 < 2.4-20131007 < 2.4.1
저희는 각 버전들을 이런 의미로 사용합니다.
- 2.4a2 – 2.4 알파 2
- 2.4b1 – 2.4 베타 1
- 2.4c1 – 2.4 릴리즈 캔디데이트 1
- 2.4 – 2.4 최종 릴리즈
- 2.4–20131007 – 2.4 최종 릴리즈의 수정본의 내부 테스트 버전
- 2.4.1 – 2.4 버전의 첫번째 메인터넌스 릴리즈.
가능하다면 코드 저장소에 이 버전 이름과 대응되는 브랜치나 태그를 만들어주시는 게 좋습니다. 그렇게 유지한 버전을 활용하는 법은 Setuptools 에 대한 별도의 포스트에서 다루게 될 것입니다.
packages
packages
에는 배포 판에 포함시킬 패키지들이 목록을 나열합니다. 최 상위 패키지 뿐만 아니라 하위 패키지들도 모두 나열해야 함에 주의하셔야 합니다. 패키지에 들어있는 모듈들은 별도로 나열하지 않아도 됩니다. 이 인자로는 패키지에 속하지 않는 모듈을 지정할 수는 없습니다. 필요하면 py_modules
인자를 통해 지정할 수 있지만, 저희는 항상 패키지를 사용합니다.
scripts
설치할 스크립트가 있다면 scripts
인자로 지정합니다. 여기에 지정한 스크립트는 가상환경의 bin
디렉터리에 설치되어 어느 곳에서든 실행 가능하게 됩니다.
MANIFEST.in
파이썬 스크립트 외의 파일도 배포해야 하는 경우가 있습니다. 가령 장고 프로젝트에 포함된 템플릿 파일들이 이런 경우에 해당합니다. setup()
에 인자로 지정하는 방법도 있지만 저희들이 사용하는 것은 MANIFEST.in
파일입니다. 이 파일은 약간의 구문 규칙을 포함하고 있는데, 예를 들면 이렇습니다.
include virtualenv.py setuptools-*.tar.gz pip-*.tar.gz
recursive-include flowdas/books/templates *.html
include
로 지정된 파일들은, Virtualenv 를 소개하는 앞의 글에서 사용한 파일들입니다. 와일드카드 문자를 사용할 수 있다는 점을 기억해 두세요.
recursive-include
로 flowdas/books/templates
디렉터리 아래에 있는 html
파일들을 지정합니다. 서브 디렉터리가 있더라도 모두 들어가게 됩니다.
Distutils 가 배포 판에 포함시키는 파일들을 결정하는데 사용하는 일련의 규칙을 갖고 있기 때문에, MANIFEST.in
파일에 지정되지 않은 파일들도 일부 포함되게 됩니다(가령 README 파일). 다음 명령을 통해 어떤 파일들이 포함되는지 확인해가면서 작업하시면 됩니다.
python setup.py sdist
이 명령을 실행하면 dist 디렉터리가 생기고 배포 판이 만들어집니다. 이 파일의 내용을 살피는 것이 확실한 방법이지만, 함께 만들어지는 MANIFEST
파일을 살펴도 좋습니다.
출처 : http://www.flowdas.com/blog/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-distutils/