pip install numpy
みたいにできるpackageをつくりましょう。
sample codeはこちら で、folder構成は
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.rst
├── docs
│ ├── Makefile
│ ├── conf.py
│ ├── index.rst
│ └── make.bat
├── hoge_hoge
│ ├── __init__.py
│ ├── core.py
│ └── helpers.py
├── requirements.txt
├── setup.py
└── tests
├── __init__.py
├── context.py
├── test_advanced.py
└── test_basic.py
大事なのはsetup.pyです。
setup.pyを書くというのはpackageをつくるということです。setup.pyはDistutilsのラッパーというか窓口と考えて
考えています。詳しくdistutilsを知らたい方は別途しらべてみてください。
setup.pyの内容は一行一行は簡単で、名前とかバージョンとか、ちょととややこし目は依存パッケージとか。が基本です
でも、本当に簡単なので恐れないで。
from setuptools import setup, find_packages
setup(
name='パッケージ名',
version="0.0.1", # X.Y.Z 形式
description="短めの説明",
long_description="長めの説明",
url='必要ならばURL',
author='作者名',
author_email='メールアドレス',
license='ライセンス',
classifiers=[
# パッケージのカテゴリー
# https://pypi.python.org/pypi?:action=list_classifiers
# から該当しそなもを選んでおけばよい。
],
keywords='キーワード',
install_requires=["依存関係のあるパッケージ"],
)
メタデータ一覧はこちら
setup.pyが書けたならそれをインストールするには
pip install -e ./hoge_hoge or python setup.py develop or python setup.py install
python setup.py developは開発中のフォルダで一回、このコマンドでインストールした後でソース変更してもイチイチ python setup.py installしなくてよい。
逆にpython setup.py installはいわゆる普通のインストールです。私はpython setup.py install しかしたことがなかったです。
ちなみにsetup.pyの内容をyamlでsetup.cfgに書くこともできます。link
より綺麗に管理したい場合にお勧めです。
他にもtox.iniを採用しているチームもあるでしょう。
これはテストツールになります。ですのでパッケージングの本記事では詳しくは説明しませんが
setup.pyと同階層にtox.iniがあれば、お!?テストツールにtoxを採用しているんだな、くらいに思っておけばいいです。
toxとは簡単にいえばいろんなpython version環境下でテストを行えるツールです。例えばpython2.7とpython3.6でのテストを実行させたい
などなど。
こんな書き方を見たことがあるかもしれません。これは
#__init__.py
__path__ = __import__('pkgutil').extend_path(__path__, __name__)
ネームスペースパッケージとして追加するという意味です。python3.3以降はこんなのを書かなくても__init__.pyがないディレクトリは自動的に
ネームスペースパッケージとして扱われるようになりました。
ネームスペースパッケージとは、マージ可能なパッケージとでいいましょうか。こちらの記事が詳しいです。
あ、よく会社や組織のパッケージングでは company.payment.banker
例えばcompanyという会社のpayment組織がbankerというパッケージを開発していたら、おそらく
company自体はネーミングパッケージで良さそうです。様々な組織が同一ネーミングパッケージで開発すること
でインポートする側(実際にインストールして使う人たち)はcompany.innovation.solutionとかいうパッケージを同じく
companyはネーミングパッケージでつくっておくと
pip install banker, pip install solutionとすると、それぞれ
from company.innovation import solution from company.payment import banker
のように、できるって感じですね。
あと
根本の__init__.pyに__version__を書いているライブラリが結構ありますが、これですね。
__version__ = '0.0.1'
個人的には
なくていいと思います。setup.pyでバージョン書いているので、二重管理になりすし。
以上です、が
あとカバーしたい内容としては
「python ドキュメントの作り方」(sphinxが多いかな。)
「パッケージをpypiに登録してpipできるよにする方法」
がありますが、この言葉、そのままググっても沢山情報がでてくると思いますので、一旦それで良いかと。
以上です
参考;
https://stackoverflow.com/questions/19048732/python-setup-py-develop-vs-install
simple python packaging, python packaging for intern