Pythonのパッケージ機構
- wheel: Pythonのパッケージ形式
- Pythonのコードや共有ライブラリが入ったファイル (
*.whl
) - 他のパッケージに依存しているときはそれがメタデータに書いてある
- Pythonのコードや共有ライブラリが入ったファイル (
- PyPI: The Python Package Index
- 誰でもログインするとアップロードできる
- 会社内用など、独自にIndex自体を立てることも出来る
- pip: パッケージインストーラ
- パッケージをPyPIから探して来てインストールしてくれる
- パッケージが依存しているパッケージも一緒にインストールくれる
- 基本的にシステム(
/usr/lib/python3.x/site-package
)にインストールする
pip install numpy
Semantic Versioning
X.Y.Z
形式のバージョン付けを採用している
- APIの変更に互換性のない場合はメジャーバージョン(
X
)を、 - 後方互換性があり機能性を追加した場合はマイナーバージョン(
Y
)を、 - 後方互換性を伴うバグ修正をした場合はパッチバージョン(
Z
)を上げます。
pip install "numpy==1.15"
-
requirements.txt
というファイルに依存しているパッケージを列挙しておいてまとめてインストールする
pip install -r requirements.txt
複数のプロジェクトを開発する
- Project A
tensorflow == 1.15
- 2.0系では動かない
- Project B
tensorflow == 2.0
- 1.0系では動かない
システムに複数のバージョンのパッケージを同時にインストールする事は出来ない!
venv (virtualenv)
- プロジェクト毎にパッケージをインストールしたい
- Python3.3から標準に入った
- Python2.x向けにvirtualenvというパッケージがあった
python3 -m venv path/to/new/venv # venvの作成
source path/to/new/venv/bin/activate # 有効化
- venv自体の管理は手動でやることになる
- 典型的にはプロジェクト直下に
venv
ディレクトリを作る
- 典型的にはプロジェクト直下に
pyproject.toml
- Pythonのプロジェクト管理の為の公式ファイルフォーマット
- PEP(Python Enhancement Proposals) 518
- パッケージ化の設定
setup.py
,setup.cfg
や 依存パッケージのリストrequirements.txt
などを統合 - pip 19.2からサポート
-
setup.py
が無くてもpypoetry.toml
からpip install
できる
-
- ツールごとに名前空間
tool.${toolname}
を作って独自設定を記述することが出来る- ツール毎に別設定ファイルを作らなくてもよくなった
poetry
- pyproject.tomlベースでプロジェクト管理をしてくれるツール
-
poetry init
でpyproject.tomlを生成してくれる
-
- venvを勝手に作って管理してくれる
-
poetry run [shell script]
で venv下でスクリプトを実行してくれる
-
- PyPIへのアップロード機能もある
[tool.poetry]
name = "hello"
version = "0.1.0"
description = "Hello Poetry!"
[tool.poetry.dependencies]
python = "^3.7" # Python自体のバージョンも書ける(満たしてるかチェックしてくれるだけ)
numpy = "1.14" # ここに依存しているパッケージを書いていく
[tool.poetry.dev-dependencies]
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"