Skip to content

3. 파이썬 가상 환경과 패키지 설치 및 배포하기

흔한 찐따 edited this page Apr 20, 2022 · 1 revision

가상 환경 및 패키지

파이썬 공식 문서의 가상 환경 및 패키지에 따르면 다음과 같이 설명하고 있다.

  • 파이썬 응용 프로그램은 종종 표준 라이브러리의 일부로 제공되지 않는 패키지와 모듈을 사용한다.
  • 즉, 파이썬 하나만 설치한다고 해서 모든 응용 프로그램의 요구 사항을 충족시키는 것이 불가능할 수도 있다.
  • 예를 들어, 응용 프로그램 A 에 특정 모듈의 버전 1.0 이 필요하지만, 응용 프로그램 B 에 버전 2.0 이 필요한 경우, 요구 사항이 충돌하고, 버전 1.0 또는 2.0 을 설치하면 어느 한 응용 프로그램은 실행할 수 없게 된다.
  • 이 문제에 대한 해결책은 가상 환경(Virtual Environment) 을 만드는 것이다.
    • 가상 환경이란, 파이썬 사용자와 응용 프로그램이 같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않으면서, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하고 협력적으로 격리된 실행 환경을 의미한다.
    • 파이썬에서는 이 가상 환경을 venv 모듈을 통해 제공한다.
    • venv 모듈은 자체 사이트 디렉터리를 갖는 경량 《가상 환경》을 만들고, 선택적으로 시스템 사이트 디렉터리에서 격리할 수 있도록 지원한다.
    • venv 모듈에 대해 자세한 설명을 참고하고 싶다면 파이썬 공식 문서의 venv 문서를 참고하면 된다.
  • 이 가상 환경은 특정 버전 파이썬 설치와 여러 추가 패키지를 포함하는 완비된 디렉터리 트리(Directory Tree)이다.
  • 서로 다른 응용 프로그램은 서로 다른 가상 환경을 사용할 수 있다.
  • 앞서 본 상충하는 요구 사항의 예를 해결하기 위해, 응용 프로그램 A 에는 버전 1.0 이 설치된 자체 가상 환경이 있고, 응용 프로그램 B 에는 버전 2.0 이 있는 다른 가상 환경이 있을 수 있다.
  • 응용 프로그램 B 에서 라이브러리를 버전 3.0 으로 업그레이드해야 하는 경우, 응용 프로그램 A 의 환경에 영향을 미치지 않는다.

파이썬 패키징 위원회 (PyPA; Python Packaging Authority)

  • 이 외에 파이썬 패키지 설치에 대한 더 자세한 지침 사항을 알고 싶다면 파이썬 공식 문서의 Python Packaging User Guide 문서를 참고하면 된다.
  • 파이썬 패키징 위원회는 표준 패키징 도구와 관련 메타 데이터 및 파일 형식 표준의 유지 보수 및 발전을 담당하는 개발자 및 문서 작성자 모임이다.
  • 이 위원회에서 GitHubBitbucket 에 다양한 도구, 문서, 이슈 추적기를 유지하고 제공한다.

가상 환경 (Virtual Environment)

  • 파이썬에서 가상 환경을 생성하고 관리하기 위해서는 venv 모듈을 사용한다.
  • venv 모듈에 대해 자세한 설명을 참고하고 싶다면 파이썬 공식 문서의 venv 문서를 참고하면 된다.

개념

  • 가상 환경(Virtual Environments) 이란, 자신이 원하는 파이썬 환경을 구축하기 위해 필요한 모듈만 담아 놓는 바구니라고 생각하면 된다.
  • 즉, 각 가상 환경( virtualenv1 , 2 , 3 …)은 독립적으로 관리된다.
  • 각 모듈은 다른 모듈에 대한 의존성(dependency) 이 다르기 때문에 이를 신경쓰지 않고 마구잡이로 설치하다보면 이유 모를 충돌이 날 수도 있다.
  • 따라서 각 프로젝트 별로 별개의 가상환경을 만들어놓고 사용하는 것이 프로젝트를 관리하거나 유지 보수를 하는데 굉장히 유용하다.

가상 환경이 필요한 이유

가상 환경이 필요한 대표적인 이유는 다음과 같다.

  • 같은 모듈을 사용한다고 하더라도 다른 버전을 필요로 할 경우
  • 파이썬 프로그램을 실행하기 위한 최소한의 환경을 마련하고자 할 경우
  • 깃허브(GitHub) 등의 저장소나 네트워크와 연계하고자 할 때 등으로 매우 다양하다.

가상 환경 사용하기

가상 환경 만들기

  • 가상 환경을 만들고 관리하는 데 사용되는 모듈은 venv 라고 한다.
  • venv 는 일반적으로 프로그래머가 사용할 수 있는 최신 버전의 파이썬을 설치한다.
  • 시스템에 여러 버전의 파이썬이 있는 경우, python3 또는 원하는 버전을 실행하여 특정 파이썬 버전을 선택할 수 있다.
  • 가상 환경을 만들려면 원하는 디렉터리를 결정하고 venv 모듈을 스크립트로 실행하는데 디렉터리 경로를 명령행 인자로 전달한다.
    • 명령어: python3 -m venv 가상 환경 이름
    • 가상 환경을 설치할 위치에 디렉토리가 존재하지 않는 경우, 새로운 디렉토리를 생성하고 그 안에 파이썬 인터프리터 및 다양한 지원 파일의 사본을 포함하는 디렉토리를 생성한다.
  • 가상 환경의 일반적인 디렉터리 위치는 .venv 이다.
    • 이 이름은 디렉터리가 보통 셸에서 숨겨져 있도록 하므로(즉, 숨긴 파일을 의미한다.), 디렉터리가 존재하는 이유를 설명하는 이름을 제공하면서도 방해받지 않도록 한다.
    • 또한, 일부 툴링(tooling)이 지원하는 .env 환경 변수 정의 파일과의 충돌을 방지한다.

가상 환경 실행하기

  • 위의 과정대로 가상 환경을 만들었으면, 가상 환경을 활성화할 수 있다.
  • 윈도우(Windows)에서는 명령 프롬프트를 실행한 후 다음 명령어를 입력한다.
    • 명령어: 가상 환경 이름\Scripts\activate.bat
  • 가상 환경을 활성화하면, 셸의 프롬프트가 변경되어 사용 중인 가상 환경을 보여주고, 환경을 수정하여 python 명령어를 실행하면 특정 버전의 파이썬이 실행되도록 한다.
  • 예를 들면 아래와 같다.
    • 참고로, 아래의 예시에서는 가상 환경을 tutorial-env 로 생성하였다.
    • 일반적으로는 외부적으로 다른 파일에 의해 간섭하는 것을 방지하고 가상 환경 파일을 숨기기 위해 .venv 라는 이름으로 생성한다.
C:\Users\iamjjintta>tutorial-env\Scripts\activate
(tutorial-env) C:\Users\iamjjintta>python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 

이로써 가상 환경을 설치하고 실행하는 것까지 완료하였다.

가상 환경을 사용하는 IDLE 실행하기

  • venv 가상 환경을 사용하는 IDLE 을 실행하려면 가상 환경을 활성화 시킨 뒤 idlelib 모듈을 실행하면 된다.
  • 이렇게 하면 IDLE 에서도 현재 가상 환경의 패키지를 사용할 수 있다.
C:\Users\iamjjintta>tutorial-env\Scripts\activate
(tutorial-env) C:\Users\iamjjintta>cd tutorial-env
(tutorial-env) C:\Users\iamjjintta\tutorial-env>pythonw.exe -m idlelib

파이썬 모듈 설치하기

파이썬 공식 문서의 파이썬 모듈 설치하기에서는 다음과 같이 설명하고 있다.

  • 널리 사용되는 공개 소스 개발 프로젝트로서, 파이썬에는 적극적으로 지원하는 기여자와 사용자의 커뮤니티가 있어 자신들의 소프트웨어를 공개 소스 라이센스 계약에 따라 다른 파이썬 개발자가 사용할 수 있도록 한다.
  • 이를 통해 파이썬 사용자는 효과적으로 공유하고 공동 작업할 수 있으며, 다른 사람들이 공통 (심지어 때로는 희귀한) 문제에 대해 이미 만든 솔루션의 이점을 누릴 수 있다.
  • 뿐만 아니라, 자체 솔루션을 공동 풀에 잠재적으로 제공할 수 있다.

pip (패키지 관리자; Package Manager)

  • pip 는 파이썬(python)으로 작성된 패키지 소프트웨어를 설치 · 관리하는 패키지 관리 시스템이다.
  • PyPI (Python Package Index) 에서 많은 파이썬 패키지를 볼 수 있다.
  • 파이썬 2.7.9 이후 버전과 파이썬 3.4 이후 버전은 pip 를 기본적으로 포함한다.
  • 2020년 1월 1일자로 Python 2의 지원이 종료되었다.
  • 현재는 Python 3 버전이 기본으로 지원 및 포함하고 있다.
  • pip 공식 문서를 참고하면 더 자세하고 많은 정보를 볼 수 있다.

위의 내용을 정리하자면 다음과 같다.

  • pip 는 선호되는 설치 프로그램이다.
  • 파이썬 3.4 버전부터, 기본적으로 파이썬 바이너리 설치 프로그램에 포함되어 있다.

pip로 패키지 관리하기

  • pip 라는 프로그램을 사용하여 패키지를 설치, 업그레이드 및 제거할 수 있다.
  • 기본적으로 pipPyPI (Python Package Index) 에서 패키지를 설치한다.
  • 사용자가 직접 웹 브라우저에서 PyPI로 이동하여 찾아볼 수 있다.
  • pipinstall , uninstall , freeze 등 여러 하위 명령이 있다.

pip 명령어

  • pip 명령어는 python -m pip <command> [options] 혹은 py -m pip <command> [options] 혹은 pip <command> [options] 와 같이 사용한다.
  • 참고로, -m 옵션은 모듈을 실행하는 옵션이며, pip 역시 모듈이기에 사용이 가능한 것이다.

pip 에서 자주 사용되는 명령어들은 다음과 같다.

  • pip -V , --version
    • 설치된 pip 버전을 확인한다.`
  • pip help : pip 명령어 메뉴얼(도움말)
  • pip list 또는 pip freeze : 설치된 패키지 모듈 목록 출력
  • pip search 패키지 : 패키지 모듈 검색
  • pip install 패키지[==버전] : 특정 버전의 패키지 모듈를 설치
    • ex. requests 패키지 모듈 설치 시: pip install requests
    • 직접 패키지 모듈의 버전을 명시할 경우: pip install requests==2.27.1
  • pip uninstall 패키지 : 패키지 모듈 삭제

pip help

  • pip 의 명령어 메뉴얼(도움말)을 확인하는 명령어이다.
  • 명령어는 pip help 혹은 pip -h , pip --help 와 같이 사용한다.

pip list

  • 설치된 패키지 모듈의 목록을 확인하는 명령어이다.
  • 명령어는 pip list 와 같이 입력한다.

옵션 (Options)

자주 사용되는 옵션들을 정리하면 다음과 같다.

  • --user
    • 사용자 환경에 설치된 패키지 모듈만을 보여준다.

pip search

  • pip 로 설치할 수 있는 파이썬 패키지 모듈을 검색하는 명령어이다.
  • 기본적으로 PyPI에서 패키지 모듈을 검색을 한다.
  • 명령어는 pip search <package_name> 와 같이 입력한다.

옵션 (Options)

  • -i <url> , --index <url>
    • 파이썬 패키지 모듈을 검색할 url 을 직접 지정하는 옵션이다.
    • 기본값으로 설정되어 있는 urlPyPI 이다.

pip install

  • 패키지 모듈을 설치하는 명령어이다.
  • 명령어는 pip install [option] package_name[==version] 와 같이 사용한다.
  • 예를 들어, requests 라는 패키지 모듈을 설치하려고 한다면, pip install requests 와 같이 입력한다.

옵션 (Options)

자주 사용되는 옵션들을 정리하면 다음과 같다.

  • -r <file> , --requirement <file>
    • file 은 패키지 모듈에 대한 요구 사항 정보가 있는 파일을 의미한다.
    • 즉, 요구 사항(이를테면 설치할 패키지 모듈들의 호환성을 위한 버전)에 맞춰진 모듈을 설치한다.
    • 일반적으로 요구 사항 파일은 requirements.txt 파일에 작성한다.
      • ex. pip install -r requirements.txt
    • 해당 옵션은 여러 번 사용할 수 있다.
      • 즉, 여러 요구 사항 파일들을 적용할 수 있다.
  • -U <package_name> , --upgrade <package_name>
    • package_name 에 해당하는 패키지 모듈 버전을 업데이트 한다.
    • 만약 설치되어 있지 않는 패키지일 경우, 해당 패키지의 가장 최신 버전이 설치된다.
    • 예를 들어, requests 라는 패키지 모듈을 설치하려고 한다면, pip install -U requests 와 같이 입력한다.
    • 직접 원하는 버전을 설치하고 싶을 경우, pip install requests==2.27.1 와 같이 입력한다.
    • pip 모듈을 업데이트를 해야 할 경우, pip install -U pip 명령어로 pip 모듈을 업데이트 시킬 수 있다.
  • --user
    • pip 설치 시 유저 모드(user mode)로 설치하는 옵션이다.
    • 사용하는 방법은 pip install <package_name> --user 와 같이 사용한다.
    • 주로 윈도우에서 pip 버전을 업데이트를 할 때 관리자 권한 문제로 설치가 안 되는 경우, --user 옵션을 사용하면 해결된다.
      • 파이썬의 패키지 관리자인 pip 는 system 경로에 패키지를 설치하므로 관리자(root) 권한이 필요한 문제가 있다.
      • 이를 해결하려면 패키지 작업시마다 root 권한으로 작업하거나 파이썬 패키지가 설치되는 디렉터리를 일반 사용자도 쓸 수 있도록 하는 방법이 있는데, 이는 둘 다 피해야할 작업 방식이다.
      • 다행히 pip 는 사용자 경로에 패키지 설치를 지원하므로, --user 옵션을 추가하면 root 권한이 없어도 패키지 설치가 가능해진다.
    • 플랫폼 사용자에 해당하는 site-packages 디렉터리에 패키지 모듈을 설치하도록 하는 옵션이다.
      • site-packages 디렉터리는 pip 를 통해 설치된 패키지 모듈이 있는 디렉터리이다.
      • 이는 site.USER_SITE 에 지정되어 있는 경로에 해당한다.
      • 윈도우 같은 경우, 일반적으로 %APPDATA%Python 의 경로가 기본 경로이다.

pip uninstall

  • 설치된 패키지 모듈을 삭제하는 명령어이다.
  • 명령어는 pip uninstall [option] package_name 와 같이 입력한다.
  • 예를 들어, requests 라는 모듈을 삭제하려고 한다면, pip uninstall requests 와 같이 입력한다.

옵션 (Options)

  • -r <file> , --requirement <file>
    • 정의된 요구 사항 파일( file )에 해당하는 패키지 모듈을 삭제한다.
    • 해당 옵션은 여러 번 사용할 수 있다.
      • 즉, 여러 요구 사항 파일들을 적용할 수 있다.
  • -y , --yes
    • 패키지 모듈 삭제 시 해당 패키지 모듈을 정말로 삭제할 것인지 한번 더 물어보는 메시지를 생략한다.

pip freeze

  • 설치된 패키지 모듈을 요구 사항 형식(requirements)으로 출력하는 명령어이다.
  • 패키지 모듈은 대소문자를 구분하지 않는 정렬 순서로 나열되어 있다.
  • 명령어는 pip freeze 와 같이 입력한다.
  • 만약 자신의 파이썬 환경에 맞춰진 패키지 모듈들의 요구 사항 파일을 생성하고자 한다면, pip freeze > requirements.txt 와 같이 입력한다.

정리 및 요약

위의 내용들을 참고하여 순서를 열거해보자면 다음과 같다.

  1. 명령 프롬프트에 python -m venv 가상환경명 명령어를 입력하여 파이썬 가상 환경을 생성한다.
    • 이때, 가상 환경의 명칭은 .venv 로 하는 것이 관례이다.
  2. .venv\Scripts\activate 명령어를 통해 가상 환경을 활성화한다.
  3. pip install -U 패키지명 명령어를 통해 자신이 설치하고자 하는 패키지를 설치한다.

지금까지 venv 를 통해 파이썬 가상 환경을 생성하는 것과 pip 를 통해 파이썬 패키지 모듈을 설치하는 것을 알아보았다.

PyPI에 파이썬 패키지 배포하기

준비하기

먼저, 아래처럼 pip 명령어를 통해 파이썬에서 기본적으로 제공하는 setuptools 라이브러리를 업데이트 해준다.

pip install -U setuptools

그 다음, pip 명령어를 통해 다음과 같이 wheel 모듈을 설치한다.

pip install wheel

setup.py 작성하기

준비를 마쳤다면 setup.py 라는 파이썬 파일을 생성한 후, 다음과 같이 코드를 작성한다.

# setup.py

from setuptools import setup
from setuptools import find_packages


setup(
    name             = 'iamjjintta',
    version          = '0.0.1',
    description      = '나는 찐따다.',
    author           = 'iam-jjintta',
    author_email     = 'iamjjintta@gmail.com',
    url              = 'https://github.com/iam-jjintta',
    download_url     = 'https://github.com/iam-jjintta',
    install_requires = [ ],
    packages         = find_packages(),
    keywords         = ['iamjjintta'],
    python_requires  = '>=3',
    zip_safe         = False,
    classifiers      = [
        'Programming Language :: Python :: 3.10',
    ]
)

setup 함수의 매개 변수는 다음과 같다.

  • name: 패키지명
  • version: 패키지 버전
  • description: 패키지에 대한 설명
  • author: 패키지 작성자
  • author_email: 패키지 작성자 이메일
  • license: 라이선스
  • url: 패키지 공식 홈페이지 혹은 공식 문서 사이트
  • download_url: 패키지 다운로드 사이트
  • install_requires: 패키지에 사용된 다른 패키지 목록
  • keywords: 패키지 관련 키워드
  • python_requires: 패키지 사용 시 요구되는 파이썬 버전
  • zip_safe: zip 아카이브 생성 여부
    • 만약 매개 변수 package_data 를 설정했을 경우, False 를 넘겨준다.
  • package_data: 패키지에 포함시킬 데이터(파일) 목록
  • packages: 패키지 빌드 시 함께 포함시킬 다른 패키지 목록
  • classifiers: PyPI에 업로드 시 보여질 메타 데이터(Meta Data) 목록
    • 메타 데이터란, 데이터를 위한 데이터를 의미한다.
    • 즉, 단순히 패키지에 대한 부가 설명이므로, 패키지를 빌드하는데 영향을 주지 않는다.
    • 주로 패키지를 사용하는 데 요구되는 파이썬 버전을 명세한다.

빌드하기

패키지를 빌드하려면 다음과 같이 명령어를 입력한다.

python setup.py bdist_wheel

그러나, 배포를 위한 모듈인 twine 에서는 sdist 옵션을 사용하도록 예시로 설명하고 있다. 그래서 다음과 같이 sdist 옵션을 사용했다.

python setup.py sdist bdist_wheel

배포하기

PyPI에 배포를 하기 위해서는 다음과 같이 pip 명령어를 통해 twine 모듈을 설치한다.

pip install twine

PyPI에서 회원 가입을 한 후, 다음과 같이 명령어를 입력한다.

twine upload dist/*

이렇게 하면 배포가 완료된다.

확인하기

내가 배포한 파이썬 패키지를 확인하려면 pip 명령어를 통해 배포한 패키지를 설치해본다. 나는 iamjjintta 라는 이름의 패키지를 배포하였다.

pip install iamjjintta

성공적으로 패키지가 다운로드 되었다면 자신이 배포한 파이썬 패키지를 사용할 수 있다.

from iamjjintta import iamjjintta

iamjjintta.open_blog()

패키지 배포에 대한 예시 코드는 이 저장소를 통해 확인할 수 있다.

흔한 찐따

안녕하세요, 흔한 찐따 입니다.

Clone this wiki locally