自作Pythonモジュールのpypiへの登録
少し時間が空きましたが、以前に予告した通り、自作モジュールのpypiへのアップロードに挑戦してみます。
流れは以下の通り。
- アカウント登録
- setup.pyの修正
- testpypiへのお試しアップロード
- 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
次回はテストエンジニアらしく、pytestのプラグインの作成について記載したいと思います。