ソースコードと用いたデータは論文を書く段階では一緒の場所に置くことが多いが、公開は別々にやった方が良いだろう。
ソースコード等の配布
GitHubが最もPopularな手法であろう。
まずはモデルケースを見てみると良い。
ディレクトリ構造
自分用メモなので、多少簡略化して書くが先人の記事を参照するとディレクトリ構造は大まかに次のようになるべきだろう。
他の記事も参照して自分にあったものを探してほしい。
http://docs.python-guide.org/en/latest/writing/structure/
.
├── LICENSE
├── README.md
├── package
│ ├── __init__.py
│ ├── core.py
│ └── helpers.py
├── setup.py
└── tests
├── __init__.py
├── test_advanced.py
└── test_basic.py
- 説明用、顔としてのReadme
- LICENSEファイル
- プログラムをモジュール化した本体
- そのテストコード
- インストールのためのsetup.py
Readmeの書き方
Readmeの書き方には多くの流派があるようだが私はこちらの方の記事を参考にしている。
学術論文のソースの公開の場合次のようなものを使用する。
Name
====
Overview
## Description
## Requirement
## Install
## Usage
## Demo
## Licence
[MIT](https://github.com/tcnksm/tool/blob/master/LICENCE)
## Reference
[1]User Name, 'Paper Titile' Conference Name pp.xx 20XX
[tcnksm](https://github.com/tcnksm)
LICENSEの選び方
学術論文ならMITまたは2、3条項のBSDで良いだろう。
LICENSEファイルはGoogle検索したら適当な文面がHitするのでそれをCopy。
setup.pyの書き方
ここの記述がやはりとても為になる。とりあえず自分の使ってみたTemplateを載せておく。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
__author__ = 'ossyaritoori'
setup(
name='fugafuga',
version='1.0',
description='Cool Description',
author='ossyaritoori',
author_email='XXXX@gmail.com',
url='https://github.com/XXX/fugafuga',
classifiers=[
'Development Status :: 4 - Beta',
'Intended Audience :: Science/Research',
'License :: OSI Approved :: BSD License',
'Natural Language :: English',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3 :: Only',
],
packages=find_packages(),
include_package_data=True,
keywords=['Image Registration'],
license='BSD License',
install_requires=[ # 依存関係
'opencv-python',
'opencv-contrib-python',
'numpy',
'matplotlib',
],
)
特に依存関係にきちんと気を使うべきなのと、書きかけのプロジェクトの場合、雑多なファイル群が多くなるだろう。
パッケージの指定では、どうやらsetup.pyのディレクトリの同じ階か一つ下の階から探しているようなので例えば
packages=['SourceDirectory']
とすれば該当するディレクトリのみを検索してくれる。
配布用のPackage作成
このあたりはまだまだわからないことが多い。
誰かの例を見ても結構ひとそれぞれだったりして統一的見解を醸成できていない。
もろもろのディレクトリ構造の役割については英語記事で詳しいやつが合った。
__init__.py
配布用のPackageは適当なフォルダに置く。
その際、__init__.py
を置いたところがパッケージ箇所として認識される。
例えば、以下のようなディレクトリ構成だとすると
├── package
│ ├── __init__.py
│ └── yourpackage.py
このファイルの中身は最低限こうあるべき…なはず。
from . import yourpackage
他の例があるならコメントで教えてください。
このままだとinstallした時にpackage.youpackage.Functionという感じで冗長に呼ばなきゃいけなくなるような…?それって面倒だなぁ。
ソースコードからインストールさせる
次のような感じでインストールさせられる。
git clone https://github.com/FUGAFUGA/hogehoge
cd Projects
python setup.py install
PIP でインストールさせる
pipでの配布方法はいろいろあるがwheelを用いてインストールさせるのが一番簡単そう。
pip install wheel
といれてmoduleを入れる。
その後、
python setup.py bdist_wheel
を実行することでwheelファイルを作成可能だ。
あとはこのwhlファイルを指定してpip installさせても良いし、PYPIというサービスに登録することでOnlineで配布することもできる。
一連の流れはここの記事に詳しい。
データを公開する
GitHubはあくまでソースの管理を行うためのサービスで画像データなどを公開するのには向かない。
偉い人や研究室は自前のサーバーを立ててデータを公開しているかもしれないが、とりあえずは入門としてGoogleDriveやDropboxの同期機能を使おうと思っている。
問題がありそうならまた考えることにする。
総括
とりあえず初心者が自分のパッケージを発表する際の流れと手順をそれなりに詳しく書いたつもりです。意見やアドバイスなどあれば歓迎します。