Confusion Matrix(混同行列)を視覚的に描画するdalmatianというライブラリを作成してPyPIに登録しました(ソースコードはGitHubで公開)。パッケージの作成とPyPIへの登録、情報が少なくて苦労したので、必要なファイルと公開手順のメモを残しておきます。
ファイル構成
dalmatian
├── README.md
├── dalmatian
│ ├── __init__.py
│ ├── matrix.py
│ └── test.py
├── register.py
└── setup.py
dalmatian/dalmatian/matrix.pyがモジュールの実体でtest.pyがテストファイルです。必要なファイルはsetup.pyと__init__.py。register.pyやREADME.mdは任意。
setup.py
# coding: utf-8
try:
import setuptools
from setuptools import setup, find_packages
except ImportError:
print("Please install setuptools.")
import os
long_description = 'Visualizing a confusion matrix with gradations'
if os.path.exists('README.txt'):
long_description = open('README.txt').read()
setup(
name = 'dalmatian',
version = '0.1.3',
description = 'Visualizing a confusion matrix with gradations',
long_description = long_description,
license = 'MIT',
author = 'Shoya Ishimaru',
author_email = 'shoya.ishimaru@gmail.com',
url = 'https://github.com/shoya140/dalmatian',
keywords = 'confusion matrix',
packages = find_packages(),
install_requires = ['numpy', 'reportlab'],
classifiers = [
'Programming Language :: Python :: 2.7',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: MIT License'
]
)
上から順に説明します。ライブラリのインストールにはsetuptoolsを使用するのでimport。setuptoolsがインストールされていないときは警告を出して終了します。
PyPIのWebサイトにはreStructuredTextで書いたREADMEドキュメントを表示できるところがあります。やっぱりMarkdownで書きたいので、後述するregister.pyでREADME.mdの内容を変換します。config.pyでは変換によって出力されたテキストをlong_descriptionに代入しています。Use Markdown README's in Python modules
setup()の中にはライブラリの名前・バージョン・ライセンス形態・依存ライブラリなどを記入します。classifiersはPyPIのWebサイトから適しているものを見つけて設定します。今どきのPythonのライブラリ自作からPyPIへの登録
register.py
import os
import pypandoc
f = open('README.txt','w+')
f.write(pypandoc.convert('README.md', 'rst'))
f.close()
os.system("python setup.py sdist upload")
os.remove('README.txt')
Markdownで書かれたREADME.mdをreStructuredTextに変換するスクリプトです。python setup.py sdist uploadも含めることで、python register.pyのコマンドひとつで公開までできるようにしました。
__init__.py
# coding:utf-8
from matrix import Matrix
モジュールの実体と同じ階層に__init__.pyという名前でファイルを作成します。中身は空でも良いのですが、ここでクラスを列挙してimportすることで、ライブラリを使用するときにLIBRARY_NAME.CLASS_NAMEの形でクラスを扱うことができるようになります。
.gitignore
.DS_Store
*.swp
*.swo
*.pyc
*.egg-info/
dist/
ソースコードをGitHubなどで公開する場合は、パッケージ作成にともなって作られるファイルを.gitignoreに書いておくことを忘れないようにしましょう。
公開
まずPyPI > Registerでアカウントを作成します。次に下記のコマンドを実行します。
# PyPIアカウントでログイン
$ python setup.py register
# register.pyを作成している場合
$ python register.py
# 作成していない場合
$ python setup.py sdist upload
最初のアップロードではアカウント情報を入力します(.pypircに保存される)。結果出力が200でエラーがなければライブラリの公開は完了です。
今日からあなたもpypi author!!