PyPIとは
なんぞ?と訊かれたらPythonのCPANと答えてる。CPANがどんなものであったのかはもう記憶の彼方だが。
ユーザー登録だけ済ませれば、後はコマンド一発で新規登録から更新までこなしてくれる。
こんな便利なものをついこの間まで知らなかった。…人生の損失だと思う。少なくとも時間は確実に損してる。
setup.pyを書く
from setuptools import setup, find_packages setup( name = "hoge", #名前 version = "1.0", #バージョン description = "PyPIで一覧に表示されるコメント", long_description = "パッケージのページで表示されるコメント", packages = find_packages(), #パッケージを自動検出 url = 'http:// ... ', #URL author = 'foouser', #作者 author_email = 'foouser@ ... ', #メールアドレス )
基本的にはこんな感じで。
これをライブラリの一つ上の階層に置いておく。
ライブラリを登録するには
setup.py register sdist bdist_egg upload
とすれば自動的に処理が始まる。
この際、ユーザー名とパスワードを聞かれるので入力する。
windowsのPython2.5.2などで失敗するときは
http://mail.python.org/pipermail/python-bugs-list/2008-January/044636.html
のあたりを参考に、register.py upload.pyを修正する。
site-packages直下にスクリプトをインストールしたい
# fooscript.py hogehoge
のようにコンソールから使いたいスクリプトがあるなら、setup.pyに
setup(
...
scripts = ['libname/fooscript.py'],
を加える。
ライブラリに含めるファイルを詳しく指定する
__init__.pyが存在しないディレクトリ内のファイルなどは、標準ではライブラリに含まれない。
例えば libname/html_files があり、これをライブラリに含めたいなら、
setup.pyと同一ディレクトリにMANIFEST.inを作成し、
recursive-include libname/html_files *
などとして、setup.pyは
data_files = [] for path, dirs, files in os.walk('libname'): #windowsなら #path = path.replace('\\', '/') data_files.append([path, ['%s/%s' % (path, f) for f in files]]) ... setup( ... packages = find_packages(), data_files = data_files, #これを追加
のように。
指定したファイルをアップロードするアーカイブに含め、かつインストールも行うならこのようにする必要がある。
PyPIに詳しい情報を登録する
setup( ... license = 'MIT', #ライセンス platforms = ['Any'], #プラットフォーム #タグ情報 classifiers = ['Development Status :: 4 - Beta', 'Environment :: Console', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', ... ],
のように。
classifiersは一度アップロードした後、設定ページのソースを見てコピペすると楽。