Python: コマンドを含むwheelパッケージを作る
Python のパッケージというと、以前は Egg だったけど最近では wheel パッケージが増えているようだ。Egg パッケージは一度作ってみたことがあるので、今回は wheel パッケージを作ってみる。ついでに、ライブラリではなく、実行できるコマンドを含んだパッケージを作る。
環境
- Ubuntu 16.04 LTS
- Python 2.7.12
- wheel 0.29.0
ソースファイル
ソースの構成はこう:
takatoh@apostrophe $ tree .
.
├── myapp
│ ├── __init__.py
│ └── main.py
└── setup.py
1 directory, 3 files
myapp/main.py が実行されるコマンドのソースで、setup.py が wheel パッケージを作るためのファイル。
import sys
def main():
print(sys.argv)
import setuptools
setuptools.setup(
name='myapp',
version='0.0.1',
packages=setuptools.find_packages(),
entry_points={
'console_scripts':[
'myapp=myapp.main:main'
]
}
)
myapp/main.py は main 関数があるだけ。setup.py も最低限だけど、色を付けた行が実行コマンドを指定していて、'myapp=myapp.main:main' が myapp コマンドを実行すると myapp/main.py の main 関数を呼び出すことを意味している。myapp/__init__.py は空でいい。
wheelパッケージの作成
setup.py にパラメータとして bdist_wheel を渡してやる。
takatoh@apostrophe $ python setup.py bdist_wheel
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/myapp
copying myapp/main.py -> build/lib.linux-x86_64-2.7/myapp
copying myapp/__init__.py -> build/lib.linux-x86_64-2.7/myapp
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/wheel
creating build/bdist.linux-x86_64/wheel/myapp
copying build/lib.linux-x86_64-2.7/myapp/main.py -> build/bdist.linux-x86_64/wheel/myapp
copying build/lib.linux-x86_64-2.7/myapp/__init__.py -> build/bdist.linux-x86_64/wheel/myapp
running install_egg_info
running egg_info
creating myapp.egg-info
writing myapp.egg-info/PKG-INFO
writing top-level names to myapp.egg-info/top_level.txt
writing dependency_links to myapp.egg-info/dependency_links.txt
writing entry points to myapp.egg-info/entry_points.txt
writing manifest file 'myapp.egg-info/SOURCES.txt'
reading manifest file 'myapp.egg-info/SOURCES.txt'
writing manifest file 'myapp.egg-info/SOURCES.txt'
Copying myapp.egg-info to build/bdist.linux-x86_64/wheel/myapp-0.0.1.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/myapp-0.0.1.dist-info/WHEEL
すると dist ディレクトリに wheel パッケージができる。
takatoh@apostrophe $ ls dist
myapp-0.0.1-py2-none-any.whl
インストールと確認
インストールは普通に sudo pip install で。
takatoh@apostrophe $ sudo pip install dist/myapp-0.0.1-py2-none-any.whl
Processing ./dist/myapp-0.0.1-py2-none-any.whl
Installing collected packages: myapp
Successfully installed myapp-0.0.1
テスト。
takatoh@apostrophe $ myapp foo bar baz
['/usr/local/bin/myapp', 'foo', 'bar', 'baz']
うまく行った。myapp コマンドが /use/local/bin/myapp にインストールされているのがわかる。
参考ページ
cf. Pythonでグローバルコマンドを含んだパッケージを作る - Qiita
cf. Python: Wheel でパッケージを配布する - CUBE SUGAR STORAGE
