依存関係への対処

Pythonパッケージ開発

James Fulton

Climate informatics researcher

依存関係とは?

  • パッケージ内でインポートする他のパッケージ
  • mymodule.py 内:
# これらのインポートは依存関係です
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パッケージ開発

Ayo berlatih!

Pythonパッケージ開発

Preparing Video For Download...