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