파알못 파이썬: 7. 패키지 관리

Table of Content

파이썬을 공부한 내용을 정리한 글입니다. 파알못이라 이상하거나 틀린 내용이 있을 수 있습니다…

이전 섹션에서 파이썬에서 제공하는 기본 라이브러리를 살펴 봤습니다. 그러나 이것 만으로는 부족한 경우가 있습니다. 파이썬 개발에 필요한 패키지를 설치, 사용 및 관리하는 방법에 대해 알아봅니다.

Pypi

Pypi는 파이썬 패키지 저장소입니다. Node.js의 패키지를 관리할 수 있는 도구인 npm과 비슷합니다. https://pypi.org 에서 파이썬 패키지를 검색할 수 있습니다.

Pip

Pypi에서 파이썬 패키지를 설치하기 위해선 pip를 사용합니다. 윈도우에서는 pip 명령어를 사용하지만 MacOS에서는 pip 명령어를 사용하면 2.x 버전으로 사용되는 경우가 있어 3.x 버전을 사용하려면 pip3 명령어를 사용해야 합니다. 여기서는 MacOS에서 pip3 명령어를 사용하는 기준으로 설명하겠습니다.

Pip로 파이썬 패키지 설치

파이썬 패키지를 설치하려면 pip3 innstall PACKAGE_NAME 명령어를 사용합니다. 예를 들어 requests 패키지를 설치하려면 pip3 install requests 명령어를 실행합니다.

특정 버전의 파이썬 패키지를 설치하려면 설치 명령어 뒤에 등호 2개(==)를 붙입니다. 예를 들어 requests 패키지 2.9.0 버전을 설치하려면 pip3 install requests==2.9.0 명령어를 실행합니다. 참고로 pip3 install requests==2.9.* 처럼 와일드카드(*)를 사용하면 해당 버전 대에서 호환되는 최신 버전을 설치합니다.

Pip로 파이썬 패키지 제거

설치된 파이썬 패키지를 제거하려면 pip3 install PACKAGE_NAME 명령어를 사용합니다. 예를 들어 requests 패키지를 삭제하려면 pip3 uninstall requests 명령어를 실행합니다.

Pip로 설치된 파이썬 패키지 목록 출력

설치된 파이썬 패키지 목록을 출력하려면 pip3 list 명령어를 실행합니다.

가상 환경

특정 파이썬 패키지의 여러 버전을 사용하려면 가상 환경을 구축해야 합니다. 파이썬 프로젝트 디렉토리가 위치한 곳에서 python3 -m venv env 명령어를 실행합니다. 이 명령어를 실행하면 env 디렉토리가 생성됩니다.

그 다음 source env/bin/activate 명령어를 실행하면 파이썬 프로젝트가 가상 환경에서 관리되며 이 상태에서 특정 버전의 파이썬 패키지를 설치하여 사용할 수 있습니다.

HelloWorld % python3 -m venv env  ## 가상환경 구축
HelloWorld % source env/bin/activate  ## 가상환경 활성화
(env) HelloWorld %

가상 환경을 해제하려면 deactivate 명령어를 실행합니다.

Pipenv

Pipenv는 Pip와 가상 환경을 결합한 도구입니다. 위의 과정에서 만든 env 디렉토리는 삭제한 후 pip3 install pipenv 명령어로 pipenv를 설치합니다.

그 다음 가상 환경에서 사용할 패키지를 pipenv를 사용하여 설치합니다. 예를 들어 가상 환경에서 requests 패키지를 사용한다면 pipenv install requests 명령어를 실행합니다.

그 다음 파이썬에서 가상 환경이 구축되었음을 알 수 있도록 pipenv shell 명령어를 실행합니다. 가상 환경을 해제하려면 exit 명령어를 실행합니다.

가상 환경 구축 경로

윗 단계에서 구축한 가상 환경은 프로젝트 디렉토리 내에 생성되었습니다. 따라서 가상 환경에 구축한 패키지 수가 늘어나면 프로젝트의 덩치도 커지게 됩니다.

하지만 pipenv로 구축한 가상 환경은 프로젝트 디렉토리와 다른 공간에 생성됩니다. 가상 환경 구축 경로를 보려면 파이썬 프로젝트가 위치한 경로에서 pipenv --venv 명령어를 사용합니다.

HelloWorld % pipenv --venv
/Users/ing-yeo/.local/share/virtualenvs/HelloWorld-eVsErKJK

VSCode에서의 pipenv 가상 환경 설정

VSCode의 Code Runner를 사용하면서 pipenv 가상 환경을 사용하려면 settings.json 설정 파일을 수정해줘야 합니다.

{
  "python.pythonPath": "/Users/ing-yeo/.local/share/virtualenvs/HelloWorld-eVsErKJK/python3", // pipenv 가상 환경의 python 실행 파일이 위치한 경로
  "code-runner.executorMap": {
    "python": "/Users/ing-yeo/.local/share/virtualenvs/HelloWorld-eVsErKJK/python3",
  }
}

이후 Pylint가 설치되지 않았다는 경고가 뜨면 설치해줍니다.

의존성 관리

pipenv를 사용하여 패키지를 설치하면 PipfilePipfile.lock 파일이 자동으로 생성됩니다. 이 두 파일은 프로젝트의 의존성과 버전을 추적하기 위해 사용합니다.

pipenv로 설치한 패키지의 의존성을 확인하려면 pipenv graph 명령어를 실행합니다.

HelloWorld % pipenv graph  ## pipenv로 설치한 패키지의 의존성 확인
requests==2.22.0
  - certifi [required: >=2017.4.17, installed: 2019.9.11]
  - chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
  - idna [required: >=2.5,<2.9, installed: 2.8]
  - urllib3 [required: >=1.21.1,<1.26,!=1.25.1,!=1.25.0, installed: 1.25.6]

pipenv로 설치한 패키지 중 업데이트가 필요한 패키지를 검색하려면 pipenv update --outdated 명령어를 실행합니다.

HelloWorld % pipenv update --outdated  ## pipenv로 설치한 패키지 중 업데이트가 필요한 패키지 검색
✔ Success! 
All packages are up to date!

패키지 배포하기

실제로 파이썬 패키지를 배포해본 것은 아니나 미래를 위해(?) 간략하게 그 방법만 정리해봅니다.

  1. 먼저 https://pypi.org 에 계정을 만듭니다.

  2. pip3 install setuptools wheel twine 명령어로 세 가지 패키지를 설치합니다.

  3. 패키지 상위 경로에 README.md 파일을 생성합니다. 이 파일엔 패키지에 대한 설명이 포함되며 마크다운(MarkDown) 형식으로 작성합니다.

  4. 파키지 상위 경로에 LICENSE 파일을 작성합니다. https://choosealicense.com 를 참고하여 작성합니다.

  5. 패키지 상위 경로에 setup.py 파일을 만든 후 다음과 같이 코딩합니다.

    import setuptools
    import pathlib import Path
    
    setuptools.setup(
       name="packagename",
       version=1.0,
       long_description=Path("README.md").read_text(),
       packages=setuptools.find_packages(exclude=["패키지에서", "제외할", "디렉토리"])
    )
  6. python3 setup.py sdist bdist_wheel 명령어를 실행합니다. 이 명령어를 실행하면 두 개의 배포 패키지가 생성됩니다. 이 배포 패키지는 build 및 dist 디렉토리에 생성됩니다.

  7. 마지막으로 패키지를 https://pypi.org 에 업로드합니다.twine upload dist/* 명령어를 실행한 후 https://pypi.org 계정의 아이디와 비밀번호를 입력해줍니다.

Docstring

파이썬 패키지를 배포할 때 다른 사람들이 코드 사용법을 알 수 있도록 코드를 문서화해야 합니다. 예를 들어 VSCode에서 파이썬 기본 패키지에 포함된 함수를 입력하면 조그만 창에 함수에 대한 설명이 뜨는 걸 볼 수 있습니다. 이 때 사용하는 것이 Docstring(""") 입니다.

모듈의 문서화

모듈을 문서화하려면 소스코드 맨 위쪽에 Docsting을 입력합니다.

설명이 한 줄인 경우 한 줄로 입력합니다.

""" One line description. (간단한 설명) """

설명이 두 줄 이상인 경우 두 번째 줄은 비워두고 입력합니다.

""" One line description (간단한 설명)

    A more detailed explanation. (자세한 설명 및 사례)
"""

함수 또는 클래스의 문서화

함수를 문서화하려면 함수 선언부 아래쪽에 Docstring을 입력합니다. 클래스도 똑같은 방법으로 문서화할 수 있습니다.

참고로 Docstring의 작성 스타일엔 여러 종류가 있습니다. 아래는 Google Python Style Guide에 따라 만든 Docstring입니다.

def convert(path):
    """ 
    Convert the given PDF to text.

    Args:
        path(str): The path to a PDF file.

    Returns:
        path (str): The content of the PDF file as text.

    Example:
        대충 사용 예제를 설명하는 내용
    """
    # 대충 PDF 내용을 text로 반환하는 코드

Pydoc

Pydoc는 파이썬 패키지의 설명서를 보여줍니다. 예를 들어 requests 패키지에 대한 설명서를 보고 싶다면 pydoc3 requests 명령어를 실행합니다.

패키지 설명서를 html 형식으로 저장하고 싶자면 pydoc3 -w PACKAGE_NAME 명령어를 실행합니다.

HelloWorld % pydoc3 -w requests  ## requests 패키지 설명서를 html 파일로 저장
wrote requests.html

파이썬 기본 및 설치된 모든 패키지의 설명서를 보여주는 웹 서버를 실행하려면 pydoc3 -p PORT_NUM 명령어를 실행합니다.

HelloWorld % pydoc3 -p 12345  ## 12345 포트로 파이썬 패키지 설명서를 보여주는 웹 서버 실행
Server ready at http://localhost:12345/
Server commands: [b]rowser, [q]uit
server> 

댓글 남기기