의존성 다루기

Python 패키지 개발하기

James Fulton

Climate informatics researcher

의존성이란?

  • 패키지 내부에서 import하는 다른 패키지
  • mymodule.py 내부:
# These imported packages are dependencies
import numpy as np
import pandas as pd
...
Python 패키지 개발하기

setup.py에 의존성 추가

from setuptools import setup, find_packages

setup(
    ...
    install_requires=['pandas', 'scipy', 'matplotlib'],
)
Python 패키지 개발하기

의존성 버전 제어

from setuptools import setup, find_packages

setup(
    ...
    install_requires=[

'pandas>=1.0',
'scipy==1.1',
'matplotlib>=2.2.1,<3'
], )
Python 패키지 개발하기

의존성 버전 제어

from setuptools import setup, find_packages

setup(
    ...
    install_requires=[

'pandas>=1.0', # good 'scipy==1.1', # bad 'matplotlib>=2.2.1,<3' # good ], )
  • 가능한 한 많은 버전을 허용
  • 사용하지 않는 의존성 제거
Python 패키지 개발하기

Python 버전

from setuptools import setup, find_packages

setup(
    ...
    python_requires='>=2.7, !=3.0.*, !=3.1.*',
)
Python 패키지 개발하기

의존성과 패키지 버전 선택

  • 패키지 기록 또는 릴리스 노트 확인
  • 버전을 달리하여 테스트

NumPy 릴리스 노트 예시.

Python 패키지 개발하기

개발자용 환경 만들기

pip freeze
alabaster==0.7.12
appdirs==1.4.4
argh==0.26.2
...
wrapt==1.11.2
yapf==0.29.0
zipp==3.1.0
Python 패키지 개발하기

개발자용 환경 만들기

패키지 요구 사항을 파일로 저장

pip freeze > requirements.txt

파일에서 요구 사항 설치

pip install -r requirements.txt
mysklearn/
|-- mysklearn
|   |-- __init__.py
|   |-- preprocessing
|   |   |-- __init__.py
|   |   |-- normalize.py
|   |   |-- standardize.py
|   |-- regression
|   |   |-- __init__.py
|   |   |-- regression.py
|   |-- utils.py
|-- setup.py
|-- requirements.txt   <-- 개발자 환경
Python 패키지 개발하기

연습해 봅시다!

Python 패키지 개발하기

Preparing Video For Download...