自作のPythonライブラリをPyPIからpipでインストール

Created 2018年6月15日15:07
Updated 2018年6月18日16:48
Categories Python

私がgithubでメンテしているpyniconicoをpipでインストールできるようにしてみました。

このリポジトリを例としてPyPIにアップロードする手順を紹介したいと思います。

setup.py

pipでインストールできるようにするにはsetup.pyが必要になります。

setup.pyにプロジェクトの情報を記述してゆきます。

#!/usr/bin/env python

from setuptools import setup, find_packages


setup(
    name='pyniconico',
    version='1.2',
    description='Python NicoNico Douga downloader',
    long_description='Please read https://github.com/Sakaki/pyniconico/blob/master/README.md',
    author='Sakaki Mirai',
    author_email='sakaki333@gmail.com',
    url='https://github.com/Sakaki/pyniconico',
    license='https://github.com/Sakaki/pyniconico/blob/master/LICENSE',
    packages=find_packages(exclude=('tests', 'docs')),
    install_requires=[
        'progressbar2',
        'requests',
        'mutagen',
        'pillow',
        'argparse',
        'selenium',
        'beautifulsoup4',
        'click'
    ],
    entry_points='''
        [console_scripts]
        nicopy=niconico:main
    ''',
    package_data={
        'nico_tools': [
            'web_drivers.json',
            'download/ChromeDriver/README.md',
            'download/geckodriver/mpl-v2.0.md',
            'download/PhantomJS/LICENSE.BSD'
        ]
    },
)

setup.pyの中身は非常に単純なもので、setup関数に引数を渡して実行しているだけですね。

packages

ライブラリ中のパッケージ一覧を記述します。

これを指定することで、例えばPythonプログラムからfrom nico_tools import nicowalkerのようにimportができるようになります(という理解ですが違うかも・・・)。

個別に指定もできますがfind_packagesを使うと自動的に検索してくれるので、今回はこちらを使っています。

install_requires

必要なライブラリを列挙しています。

pip installの際に一緒にインストールされますので、requirements.txtと同じものを指定しています。

entry_points

console_scriptsを指定することで、ターミナルからコマンドとして実行できるようになります。

今回はnicopyコマンドでniconico.pymain関数を実行したかったのでこのような記述となっています。

package_data

プロジェクト内のpythonファイル以外で必要なファイルを列挙します。

pyniconicoではjsonやmdファイルなどを記述しています。

インストール

setup.pyが書けたらpipでインストールが可能になります。

$ pip install /path/to/project
$ pip list
your-package
...

PyPIにアップロード

まず、ライブラリのパッケージ化を行います。

setup.pyと同じディレクトリで

$ python setup.py sdist
$ ls dist
your-package-version.tar.gz

tarボールができているので、こちらをPyPIにアップロードします。

ちなみにこのtarもpip install your-package-version.tar.gzでインストールできます。

アップロードのため、PyPIでアカウントを作成してください。

メールアドレスの認証が必要なので、Account SettingsのAccount Emailsから最低でも1つのメールアドレスを認証してください。

終わったらホームディレクトリに.pypircを作成し、認証情報を記述します。

$ nano ~/.pypirc
[pypi]
username = ユーザー名
password = パスワード

アップロードにはtwineというツールが必要なので、

pip install twine
twine upload dist/your-package-version.tar.gz

これで完了となります。pip install your-packageでインストールできるか確認してみてください。

アップデートしたい場合は、twine upload dist/your-package-new_version.tar.gzで再びアップロードすることで自動的にバージョンが上がります。

ただし、アップデートの反映には少し時間がかかるみたいですね。ちなみにアップデートのインストールはpip install -U your-packageで行えます。

所感

setup.pyを書いてみましたが、思ったより簡単でした。

pip installで自分のパッケージが入るのはテンション上がりますね!

コメントを投稿

コメント