やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

PyPIパッケージ作成&更新自動化プラン

 必要そうな項目を網羅。

項目

  • Author
    • 著者名
    • メアド
  • Copyright
    • Copyright (C) {yyyy} {author_name}
    • Copyright (C) {yyyy} {author_name} <{author_email}>
  • License
  • PackageName
    • 以下文脈において使用可能な文字列であることを確認する
    • PyPI API
      • https://pypi.org/pypi/{package_name}/json
        • HTTP 404 error なら未だこのパッケージ名が存在しないことを意味する
  • RepoName
    • 言語ごとに異なるリポジトリになりうる(パッケージは大抵言語独自のため自然と言語別になる)
      • リポジトリ名は{package_name}.{language}のような書式にする
        • 記号は.くらいしか使えない
          • スペースは-に変換されるかも?
  • 公開API
    • package, module, class, function, ...
      • 静的チェックツールが欲しい
  • version
    • SemVerに従う
    • git tag(v+SemVer
    • __init__.py
      • __version__
    • setup.py
      • version
      • download_url
      • classifiers
        • Development Status
    • CHANGELOG.md
  • メタデータ設定ファイル
    • 初回作成(必須入力)
      • package_name(repo_name)
      • description
      • version初期値(0.0.1)
    • 変更
      • package_namePyPI上では名前変更不可)
      • repo_name
      • description
      • homepage
    • パッケージ検索
      • keywords
      • classifiers
        • Development Status
        • Environment
        • Framework
        • Intended Audience
        • License
        • Natural Language
        • Operating System
        • Programming Language
        • Topic
        • Typing
    • README.md
      • Common
        • PakageName
        • Description(summary,overview)
        • Requirement
        • Installation
        • Author
        • License
      • Origin
        • DEMO
        • Features
        • Usage
        • Note
    • LICENSE.txt
    • CHANGES.md
    • MANIFEST.in
    • .gitignore
    • これらが変更されたらそれらを埋めるべき箇所を変更する
      • いつ、どんなときやる?
        • コミット時に、対応箇所が、設定ファイル値と、異なるとき
  • 秘密データ(アカウント情報)
    • GitHub, PyPI
      • ユーザ名
      • パスワード
      • AccessToken
  • Gitワークフロー
  • GitHubAPI
  • 翻訳
    • trans -b en:ja 'some.'

コマンド

git init
json='{"name":"'${REPO_NAME}'","description":"'${REPO_DESC}'","homepage":"'${REPO_HOME}'"}'it
#echo "$json" | curl -u "${username}:${password}" https://api.github.com/user/repos -d @-
echo "$json" | curl -H "Authorization: token ${token}" https://api.github.com/user/repos -d @-
git add -n .
git add .
git commit -m 'メッセージ'
git remote add origin ...
git push origin master
version='v0.0.1'
message='first commit'
git tag -a "$version" -m "$message"
git push origin "$version"
git tag | sort -Vr 
rm -rf build
rm -rf dist
rm -rf ${package_name}.egg-info
python setup.py sdist
python setup.py bdist_wheel
UN=ユーザ名
PW=パスワード
twine upload -u $UN -p $PW --repository-url https://upload.pypi.org/legacy/ dist/*
twine upload -u $UN -p $PW --repository-url https://test.pypi.org/legacy/ dist/*
curl https://pypi.org/pypi/${package_name}/json
trans -b en:ja 'some.'

対象環境

$ uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux