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