PyCon APAC参加レポート第2回は,
パッケージの未来
1日目の一番初めのセッションは,
今までのパッケージングシステム
Pythonのパッケージングシステムの歴史は複雑で,
- distribute
- setuptools
またパッケージのインストールには以下のコマンドを使用します。
- pip
- サードパーティのパッケージインストーラ
- easy_
install - distribute/
setuptoolsに含まれるインストールコマンド
標準で入っているdistutilsもあるのですが,
python setup.py sdist # ソースパッケージの作成 python setup.py install # パッケージインストール
また,
- virtualenv:仮想環境の構築
- pip:パッケージインストーラ
- setuptools:パッケージ作成の補助ツール
これらはGithubとBitbucketにリポジトリが分かれているので,
easy_installとpip
パッケージのインストール方法について,
easy_install [package_name]
と書いてあったり,
pip install [package_name]
と書いてあったりします。
これらの違いは,
pip install [package_name]
# パッケージのインストール(デフォルトではPyPIからダウンロードしてきてインストール)
pip install [package_url]
# 特定URLから直接インストール
pip install [vcs{git,hg,...}+[repository_url]@[change_set]]
# GitやMercurialのリモートリポジトリから直接インストール
pip install -r requirements.txt
# requirements.txtに書かれたパッケージを全てインストール
pip uninstall [package_name]
# パッケージをアンインストール
easy_
virtualenvを使えば,
distributeとsetuptools
distributeとsetuptoolsは同じ役割を果たすライブラリですが,
マージ宣言されるまで,
setuptoolsのことは忘れてあげてください
と話していましたが,
distributeのことは忘れてあげてください
となるとおっしゃっていました。
setuptoolsはマージ後に頻繁に更新されており,
setup.py test # ユニットテスト実行
setup.py register # PyPIへの登録
setup.py sdist bdist_egg upload # ソース配布物とegg形式の配布物をPyPIにアップロード
setup.py upload_docs # ドキュメンテーションをPyPIにアップロード
その他,
from setuptools import setup, find_packages
setup(name="yourproject",
packages=find_packages(),
entry_point={
"console_scripts": [
"hello=hello:greeting",
],
})
これからのパッケージングシステム
PythonはPEPという規約に従って仕様変更が行われていきます。パッケージングシステムについてPEPで議論されている部分とそうでない部分
パッケージに関連するPEPとして以下の8つが挙げられます。
- PEP 345 -- Metadata 1.
2 - PEP 376 -- Database
- PEP 386 -- Version
- PEP 420 -- Namespace Package
- PEP 426 -- Metadata 2.
0 - PEP 427 -- Wheel
- PEP 440 -- Version
- PEP 453 -- Bundle PIP Installer
pipは先ほどの説明の通りで大きな変更はないようです。ここでは以下のWheel,
- パッケージフォーマット Wheel
- 新しいメタデータを含むzip形式のパッケージフォーマットです。電子署名も可能になっています。pipもサポートを開始しています。
- ユーティリティモジュール distlib
- pkg_
resourcesからdistlibに変更され, 今後はdistlibを使ってパッケージのメタデータにアクセスするようになります。pkg_ resourcesとほとんど同じことができるようです。 - メタデータ pydist.
json - egg-infoでかなり適当に取り決められていた仕様がまとめられ,
json形式でメタデータが扱いやすくなります。
今までまとまった情報のなかったパッケージ関連のシステムについて,