search
LoginSignup
88

More than 5 years have passed since last update.

posted at

updated at

Organization

PyPIにパッケージ登録する

初めて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以外のファイルが含まれない。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
88