読者です 読者をやめる 読者になる 読者になる

自作Pythonモジュールのpypiへの登録

少し時間が空きましたが、以前に予告した通り、自作モジュールのpypiへのアップロードに挑戦してみます。
流れは以下の通り。

  1. アカウント登録
  2. setup.pyの修正
  3. testpypiへのお試しアップロード
  4. pypiへのアップロード

では順を追って説明していきましょう。

アカウント登録

pypiへの登録にはまずアカウント登録が必要です。実際にはアップロード時にアカウントを作成することも可能なようですが、今回は事前に作成します。
アカウント登録は本番用のpypi.python.orgとテスト用のtestpypi.python.orgそれぞれに登録しておきましょう。 ユーザー名, パスワード, メールアドレスなので、特に難しいことはないと思います。(メールアドレスだけ少しルールが厳しいです。)

setup.pyの修正

前回作ったsetup.pyをpypiでのリリースに向けて修正しましょう。

from setuptools import setup


setup(
    name='siro_uma.hello',
    version='0.2.0',
    description='A sample Python project',
    long_description='This is a sample to say Hello!',
    url='https://github.com/sirouma/hello',
    author='siro_uma',
    author_email='sirouma.09@gmail.com',
    license='MIT',
    classifiers=[
    'Development Status :: 3 - Alpha',
    'Intended Audience :: Education',
    'Topic :: Education',
    'License :: OSI Approved :: MIT License',
    'Programming Language :: Python :: 3.6',
    ],
    keywords='sample setuptools development',
    packages=['hello'],
    entry_points={
        'console_scripts': [
            'hello=hello.hello:hello',
        ],
    },
)

ライセンスは1番簡単なMITをこちらのサイトを参考にしながら付与してみました。
classifiersに関しては、pypiが提供するリストの中から適当なものを選んでみています。

testpypiへのお試しアップロード

pypiへのアップロードの前に、testpypiでトレーニングしましょう。(と、pypiが申しております。Packaging and Distributing Projects — Python Packaging User Guide documentation
まずはHOME/.pypircを作成しましょう。これをやっておくと以降で出てくるregister/uploadの際にusername/passwordが聞かれなくなるので便利です。

[distutils]
index-servers =
  pypi
  pypitest

[pypi]
repository=https://pypi.python.org/pypi
username=siro_uma
password=password

[pypitest]
repository=https://testpypi.python.org/pypi
username=siro_uma
password=password

続いて前回のおさらいでインストール可能なパッケージの作成。

> python3 setup.py sdist

packagingした内容を基に、testpypiにpackageのmetadataを登録します。
まずは登録に必要なコマンドラインツールtwineをインストールし、それを使って登録を行います。

> pip3 install twine
> twine register dist/* -r pypitest
Registering package to https://testpypi.python.org/pypi
Registering siro_uma.hello-0.1.0.tar.gz

さらにpackageしたファイルを登録します。

> twine upload dist/* -r pypitest
Uploading distributions to https://testpypi.python.org/pypi
Uploading siro_uma.hello-0.1.0.tar.gz
[================================] 4350/4350 - 00:00:02

以上で、https://testpypi.python.org/pypiへの自作モジュールの登録が完了します。 念のため、インストール可能か試してみましょう。

> pip3 install -i https://testpypi.python.org/pypi siro_uma.hello
Collecting siro_uma.hello
  Downloading siro_uma.hello-0.1.0.tar.gz
Installing collected packages: siro-uma.hello
  Running setup.py install for siro-uma.hello ... done
Successfully installed siro-uma.hello-0.1.0
> hello
Hello, world!

問題なさそうなので、続いて本番環境である、https://testpypi.python.org/pypiに登録してみましょう。

pypiへのアップロード

やることはtestpypiのときと変わりません。-rでindexを指定する先が変わるだけです。

> twine register dist/* -r pypi
Registering package to https://pypi.python.org/pypi
Registering siro_uma.hello-0.1.0.tar.gz
> twine upload dist/* -r pypi
Uploading distributions to https://pypi.python.org/pypi
Uploading siro_uma.hello-0.1.0.tar.gz
[================================] 4350/4350 - 00:00:02
> pip3 install -i https://pypi.python.org/pypi siro_uma.hello
Collecting siro_uma.hello
  Downloading siro_uma.hello-0.2.0.tar.gz
Installing collected packages: siro-uma.hello
  Running setup.py install for siro-uma.hello ... done
Successfully installed siro-uma.hello-0.2.0
> hello
Hello, world!

最後に

以上でHello, world!な自作モジュールをpypiへの登録ができました。非常に簡単に自作モジュールを世に展開できるのがわかったかと思います。
参考までに、作ったモジュールへのリンクと、ソースコードのリンクを貼り付けておきます。

siro_uma.hello 0.1.0 : Python Package Index

siro-uma.hello 0.2.0 : Python Package Index

GitHub - sirouma/hello

次回はテストエンジニアらしく、pytestのプラグインの作成について記載したいと思います。