Advertisement
  1. Code
  2. Python

파이썬 패키지 사용하는 법

Scroll to top
Read Time: 7 min

() translation by (you can also view the original English article)

파이썬 패키지를 이용하면 대규모 시스템을 분해하고 시스템의 모듈을 사용자와 다른 사람들이 효율적으로 사용하고 재사용할 수 있는 일관된 방식으로 구성할 수 있습니다. 파이썬의 "배터리 포함(Batteries Included)"이라는 모토는 표준 라이브러리에 수많은 유용한 패키지가 미리 로드돼 있다는 의미입니다.

그러나 여러분이 활용할 수 있는 멋진 서드파티 패키지도 많습니다. 이번 튜토리얼에서는 패키지가 정확히 무엇이고, 패키지에서 모듈을 임포트하는 방법, 파이썬의 표준 라이브러리에서 내장 패키지를 찾아보는 방법, 서드파티 패키지를 설치하는 방법 등을 배우겠습니다.

패키지란 무엇인가?

패키지에 대해 이야기하기에 앞서 모듈에 대해 이야기해 봅시다. 모듈은 확장자가 *.py인 소스 파일로서 여러분(그리고 다른 모든 사람들)은 이곳에 프로그램을 구성하는 함수와 클래스를 작성합니다. 패키지는 파이썬의 계층적 네임스페이스 개념을 표현한 것입니다. 파이썬 선(禪)(Zen of Python)의 내용을 인용하면 다음과 같습니다.

"네임스페이스는 아주 훌륭한 아이디어다. 더욱 자주 사용하라!"

파이썬 선의 전체 내용을 보려면 파이썬 대화식 세션에서 import this를 입력합니다.

1
import this
2
3
The Zen of Python, by Tim Peters
4
5
6
7
Beautiful is better than ugly.
8
9
Explicit is better than implicit.
10
11
Simple is better than complex.
12
13
Complex is better than complicated.
14
15
Flat is better than nested.
16
17
Sparse is better than dense.
18
19
Readability counts.
20
21
Special cases aren't special enough to break the rules.
22
23
Although practicality beats purity.
24
25
Errors should never pass silently.
26
27
Unless explicitly silenced.
28
29
In the face of ambiguity, refuse the temptation to guess.
30
31
There should be one-- and preferably only one --obvious way to do it.
32
33
Although that way may not be obvious at first unless you're Dutch.
34
35
Now is better than never.
36
37
Although never is often better than *right* now.
38
39
If the implementation is hard to explain, it's a bad idea.
40
41
If the implementation is easy to explain, it may be a good idea.
42
43
Namespaces are one honking great idea -- let's do more of those!

네임스페이스는 코드 구성 및 이름 충돌을 방지하는 데 이바지합니다. 이는 여러 사람이 함께 작업하거나 다른 사람이 개발한 패키지를 사용할 때 중요합니다.

패키지는 하위 패키지 및 모듈의 계층구조를 나타내지만 패키지와 하위 패키지가 디렉터리 및 하위 디렉터리인 파일시스템 기반일 필요는 없습니다. 패키지는 그보다 훨씬 더 유연합니다.

예제 패키지

"ansible"이라는 패키지를 살펴봅시다. 이 패키지는 표준 라이브러리의 패키지는 아닙니다. 나중에 서드파티 패키지를 찾아서 설치하는 방법을 볼 수 있을 것입니다. 지금은 디렉터리 파일 구조를 확인해 봅시다.

패키지는 일반적으로 파이썬 인터프리터의 site-packages 디렉터리에 설치됩니다. 이 디렉터리는 "lib" 아래의 어딘가에 위치합니다(버전이나 OS, 배포판에 따라 다름). 맥에서는 파이썬 2.7의 경우 "/lib/python2.7/site-packages"에 있을 것입니다. 다음은 "ansible" 패키지의 구성을 보여줍니다.

1
tree ansible -L 1
2
3
ansible
4
5
├── __init__.py
6
7
├── cli
8
9
├── compat
10
11
├── config
12
13
├── constants.py
14
15
├── errors
16
17
├── executor
18
19
├── galaxy
20
21
├── inventory
22
23
├── module_utils
24
25
├── modules
26
27
├── parsing
28
29
├── playbook
30
31
├── plugins
32
33
├── template
34
35
├── utils
36
37
└── vars
38
39
40
41
15 directories, 2 files
42

총 2개의 모듈과 15개의 디렉터리가 있습니다. 각 디렉터리는 메인 ansible 패키지의 하위 패키지입니다. ansible/utils 디렉터리를 살펴보면 추가 모듈과 하위 패키지가 하나 더 있음을 알 수 있습니다.

1
tree ansible/utils -L 1
2
3
ansible/utils
4
5
├── __init__.py
6
7
├── boolean.py
8
9
├── cmd_functions.py
10
11
├── color.py
12
13
├── debug.py
14
15
├── display.py
16
17
├── encrypt.py
18
19
├── hashing.py
20
21
├── listify.py
22
23
├── module_docs.py
24
25
├── module_docs_fragments
26
27
├── path.py
28
29
├── shlex.py
30
31
├── unicode.py
32
33
└── vars.py
34
35
36
37
1 directory, 14 files

검색 경로

모듈을 임포트하면 파이썬은 검색 경로를 기반으로 검색 알고리즘을 수행합니다. 검색 경로는 검색을 시작할 디렉터리 목록에 해당합니다. 검색 경로는 sys.path를 통해 이용할 수있는 디렉터리 목록이며, 이를 동적으로 조작할 수 있습니다(검색 경로의 항목을 추가, 제거, 이동). site-packages 디렉터리는 항상 존재합니다.

ansible/utils로부터 path.py 모듈을 임포트하하려면 다음 명령을 사용해야 합니다.

import ansible.utils.path

표준 os.oath 모듈도 사용하려면 다음 명령을 사용합니다.

import os.path

이제 각 path 모듈이 서로 다른 네임스페이스에 속해 있기 때문에 충돌 없이 path 모듈을 하나 또는 모두 사용할 수 있습니다.

표준 라이브러리 탐색하기

표준 라이브러리에는 많은 패키지가 있습니다. 어떤 작업을 수행할 필요가 있는데 어떻게 할지 확신이 서지 않을 때마다 표준 라이브러리를 살펴볼 만한 가치가 있습니다. 수학, 셸 통합, OS 통합, 문자열 조작, 네트워킹 및 공통 파일 형식과 같은 범용 작업의 경우 표준 라이브러리에 잘 설계되고 성능이 뛰어나며 충분히 테스트된 패키지가 있을 가능성이 매우 높습니다 .

표준 라이브러리에 들어간다는 것은 대단한 일이므로 표준 라이브러리 패키지는 정말로 신뢰할 수 있습니다. 표준 라이브러리 패키지는 파이썬의 핵심 개발자에 의해 설계됐거나 엄격하게 검토되고 표준 라이브러리로 포함되기 전에 서드파티 라이브러리로 현장에서 많이 사용됐을 것입니다.

이곳에서 주제별로 구성한 표준 라이브러리의 모든 패키지를 확인할 수 있습니다.

PyPI

표준 라이브러리는 훌륭하지만 표준이 아닌 몇 가지 특수 기능이 필요할 때가 있습니다. 그렇다고 해서 여러분이 처음부터 그것을 작성해야 한다는 의미는 아닙니다. 파이썬에는 수많은 코드를 자유롭게 개발하고 공유하는 활발하고 활동적인 커뮤니티가 있습니다. PyPI( Python Package Index)로 들어가 봅시다. PyPI에서는 공개적으로 사용 가능한 모든 패키지를 호스팅하고 이를 검색할 수 있는 종합 서비스를 제공합니다.

PyPI 둘러보기

PyPI에는 패키지가 찾아보기 가능한 색인으로 구성돼 있습니다. 여기서는 주제, 환경, 프레임워크, 개발, 상태, 대상 사용자, 라이선스, 자연어, 프로그래밍 언어(그렇습니다. 여러 프로그래밍 언어를 지원하는 파이썬 패키지가 있습니다), 운영체제별로 둘러보고 검색할 수 있습니다.

또한 파이썬 2와 파이썬 3 패키지를 구분하며, 최근 다운로드 수로 패키지가 얼마나 인기 있는지 알 수 있습니다. 예를 들어, PyPI에서 구할 수 있는 ansible 패키지를 이곳에서 확인할 수 있으며, 다음은 해당 패키지의 메타데이터입니다.

1
Downloads (All Versions):
2
3
5528 downloads in the last day
4
5
72037 downloads in the last week
6
7
289967 downloads in the last month
8
9
Author: Ansible, Inc.
10
11
Home Page: https://ansible.com/
12
13
Bug Tracker: http://github.com/ansible/ansible/
14
15
License: GPLv3
16
17
Categories
18
19
Development Status :: 5 - Production/Stable
20
21
Environment :: Console
22
23
Intended Audience :: Developers
24
25
Intended Audience :: Information Technology
26
27
Intended Audience :: System Administrators
28
29
License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
30
31
Natural Language :: English
32
33
Operating System :: POSIX
34
35
Programming Language :: Python :: 2.6
36
37
Programming Language :: Python :: 2.7
38
39
Topic :: System :: Installation/Setup
40
41
Topic :: System :: Systems Administration
42
43
Topic :: Utilities
44
45
Package Index Owner: James.Laska, jimi, ansible
46
47
Package Index Maintainer: mpdehaan, badger
48
49
DOAP record: ansible-2.0.0.2.xml
50

패키지 설치하기

PyPI의 패키지를 설치하는 방법에는 두 가지가 있습니다. 패키지를 다운로드한 다음 python setup.py install을 실행하면됩니다. 그러나 현대적인 방법은 pip, setuptools, wheel을 사용하는 것입니다. pip는 Pip Installs Packages(이 또한 GNU와 마찬가지로 재귀 약자에 해당합니다)를 의미하며, 설치를 위한 프론트엔드에 해당합니다. python.org에서 내려받은 파이썬 2> = 2.7.9 또는 파이썬 3> = 3.4를 설치했다면 이미 pip와 setuptools가 설치돼 있을 테지만 다음과 같은 방법으로 최신 버전으로 업그레이드해야 합니다: 윈도우 환경에서 pip install -U pip setuptools 또는 python -m pip install -U pip setuptools를 실행

pip를 사용해 휠을 설치합니다: pip install wheel

이전 버전의 파이썬을 사용하고 있다면 업그레이드를 고려해 보십시오. 파이썬을 업그레이드할 수 없다면 직접 pip, setuptools, wheel을 설치해야 할 것입니다. 구체적인 방법은 이곳을 참고합니다.

파이썬 패키지는 항상 환경에 설치됩니다. 여기서 다루지 않을 일반적인 관행은 가상 환경을 사용해 서로 다른 인터프리터 및/또는 설치된 패키지가 탑재된 다수의 독립적인 파이썬 설치를 관리하는 것입니다.

모범 사례

PyPA(Python Packaging Authority)에서는 패키징과 관련된 모범 사례에 대한 여러 지침을 제공합니다. PyPA가 중요한 이유는 이곳이 활발하게 개발 중인 영역이고 권고 사항이 빠르게 발전하기 때문입니다.

또한 PyPI 대신 대체 저장소의 패키지를 설치하거나 좀 더 정교한 방식으로 pip를 사용하는 것과 같은 특별한 작업을 하고자 할 경우 훌륭한 토론과 실질적인 조언을 얻을 수 있습니다.

결론

파이썬 초보자인 경우에는 핵심 언어를 배우고 이것을 가지고 재미있게 놀 수 있습니다. 하지만 금방 표준 라이브러리를 발견하게 되고, 더 많은 경험을 얻을수록 표준 라이브러리의 풍부함으로부터 점점 더 많은 혜택을 얻게 됩니다.

파이썬주의자(Pythonista)로서 진화하는 다음 단계는 파이썬 커뮤니티가 PyPI에 내린 어마어마한 위업을 여러분의 시스템에 통합하는 것입니다. 재사용 가능한 파이썬 코드의 배포 단위인 패키지가 바로 이러한 생태계를 가능케 합니다.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.