初めてPyPIにパッケージを登録したので、やったことをまとめておく。
setup.pyできるようにする
ディレクトリ構造はこれ以上ないぐらい簡単。
.
├── LICENSE.txt
├── README.md
├── nbupload
│ ├── FileUploaderView.js
│ ├── FileUploaderWidget.py
│ └── __init__.py
└── setup.py
git管理するのでPython用.gitignoreも入れておく。
最低限のsetup.pyを書く。packages=['nbupload']
というのが、ディレクトリ名をパッケージにする書き方。詳しくはドキュメントを参照。
from setuptools import setup
setup(
name = "nbupload",
version = "0.0.1",
packages=['nbupload'],
)
これで、
python setup.py develop
と打つと、develop用にインストールされ、普通にimportすることができる。実体としては、pythonのsite-packagesディレクトリにnbupload.egg-linkというファイルがあり、この中にパッケージのディレクトリへのパスが書いてあった。
アンインストールするには
python setup.py develop -u
でよい。
pypiに登録する
setup.pyは上のだと寂しいのでいろいろ追加する。
pypiのアカウントが無い場合はアカウントを取得する。パッケージ登録テスト用のtestpypiというのもあるので、そちらにも同様の手順でアカウント登録する。登録するパスワードはプレーンテキストでホームディレクトリに置く必要がある(すぐ消してもいいけど)ので注意。
パスワードは16文字以上で大文字小文字数字が無いとダメだった気がする。GoogleのOpenIDはGoogleが新規登録をサポートしなくなったので使えない。
ホームディレクトリに.pypircを作る。(pypiにだけ登録するのであればこれを置かなくても良いっぽい(?)けど、testpypiがあるとこれを置かないといけない)
ここを参考にした。
[distutils]
index-servers =
pypi
pypitest
[pypi]
repository: https://pypi.python.org/pypi
username: {{your_username}}
password: {{your_password}}
[pypitest]
repository: https://testpypi.python.org/pypi
username: {{your_username}}
password: {{your_password}}
testpypiに登録。
python setup.py register -r https://testpypi.python.org/pypi
これでpypiに項目ができ、pip search --index https://testpypi.python.org/pypi nbupload
でも出るようになる。
ただ、このままだとまだどこにもパッケージの実体が無い状態なので、gzipをアップロードしないといけない。setup.pyにdownload_urlと書いてgithubのtagのgzipを指定することもできるが、デフォルトではpip install
はpypi以外のURLを無視するので(--allow-external
をつければ通る)、pypi自体にアップロードするのが良い。それをするのが次のコマンド。
python setup.py sdist upload -r https://testpypi.python.org/pypi
これでpip install --index-url https://testpypi.python.org/simple/ nbupload
でインストールできるようになる。
ここまでできればあとは本番pypiに登録するだけ。
python setup.py register
python setup.py sdist upload
で終了。
おまけ: python以外のファイルをパッケージに含める
今回はJSをパッケージに含めて配布する必要があるため、setup.pyにこう書かないといけなかった。
package_data = {
'nbupload': ['FileUploaderView.js'],
},
これをしないと、デフォルトではpython setup.py sdist upload
でパッケージングするときにpython以外のファイルが含まれない。