Help us understand the problem. What is going on with this article?

GitHub等を用いて論文のプログラムを公開する手順メモ

More than 1 year has passed since last update.

ソースコードと用いたデータは論文を書く段階では一緒の場所に置くことが多いが、公開は別々にやった方が良いだろう。

ソースコード等の配布

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の同期機能を使おうと思っている。
問題がありそうならまた考えることにする。

総括

とりあえず初心者が自分のパッケージを発表する際の流れと手順をそれなりに詳しく書いたつもりです。意見やアドバイスなどあれば歓迎します。

ossyaritoori
電機・ロボット・制御・画像その他
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした