sampleproject

Activity, over time

Daily observations from the public event archive.

Attention

Daily stars & forks

Loading attention chart

Star accumulation

Cumulative stars

Loading star accumulation chart

Pull requests

Daily opens & merges

Loading pull requests chart

Conversations

Daily issues & comments

Loading conversations chart

Community

Daily accounts & reviews

Loading community chart

Releases

Daily releases

Loading releases chart

Mentions

1post · 30d
Nov 40 posts
  1. Qiita · · @ShotaDeguchi

    Pythonでパッケージを管理・公開 初めに 大学が停電し,何もできないので,PyPIに挑戦することにした.第一歩として,こちらに従う. PyPI まず,適当なパッケージを作り,GitHubにPublicで公開する(cf. こちら).因みに,pytestを使うと都度チェックできて便利とGPTに教えてもらった. 次に,PyPI > Account settings > API tokensから,Add API tokenで生成されたTokenを保管しておく. その後, (.venv_mypackage) WorkingDirectory$ python -m build を打つと, ├── dist │ ├── example_package_shotadeguchi-0.0.1-py3-none-any.whl │ └── example_package_shotadeguchi-0.0.1.tar.gz ができる.tree全体は以下. WorkingDirectory ├── LICENSE ├── README.md ├── dist │ ├── example_package_shotadeguchi-0.0.1-py3-none-any.whl │ └── example_package_shotadeguchi-0.0.1.tar.gz ├── pyproject.toml ├── src │ ├── example_package_ShotaDeguchi │ │ ├── __init__.py │ │ └── example.py │ └── example_package_ShotaDeguchi.egg-info │ ├── PKG-INFO │ ├── SOURCES.txt │ ├── dependency_links.txt │ └── top_level.txt └── tests ls distで中身が存在することを確認し, (.venv_mypackage) WorkingDirectory$ python -m twine check dist/* Checking dist/example_package_shotadeguchi-0.0.1-py3-none-any.whl: PASSED Checking dist/example_package_shotadeguchi-0.0.1.tar.gz: PASSED でPASSEDを確認したら, (.venv_mypackage) WorkingDirectory$ python -m twine upload dist/* でアップロード.ここでPyPIから生成されたAdd API tokenをペースト.すると, ... ... ... View at: https://pypi.org/project/example-package-ShotaDeguchi/0.0.1/ と言われ,リンクを踏むとここに飛ぶ.PyPIにアップロードできたようだ. 最後に,別環境でチェックする. WorkingDirectory$ python -m venv .venv_test_mypackage WorkingDirectory$ source .venv_test_mypackage/bin/activate (.venv_test_mypackage) WorkingDirectory$ pip install example-package-ShotaDeguchi==0.0.1 Collecting example-package-ShotaDeguchi==0.0.1 Downloading example_package_shotadeguchi-0.0.1-py3-none-any.whl (3.0 kB) Installing collected packages: example-package-ShotaDeguchi Successfully installed example-package-ShotaDeguchi-0.0.1 (.venv_test_mypackage) WorkingDirectory$ python -c "from example_package_ShotaDeguchi import example; print(example.add_one(1))" 2 (.venv_test_mypackage) WorkingDirectory$ python -c "from example_package_ShotaDeguchi import example; print(example.add_one(2))" 3 (.venv_test_mypackage) WorkingDirectory$ python -c "from example_package_ShotaDeguchi import example; print(example.add_one(3))" 4 (.venv_test_mypackage) WorkingDirectory$ 以上を以て,パッケージの開発,PyPIへのアップロード,pipを使ったインストールまでができた.ここまでで一区切り. Sphinx pyproject.tomlの ... ... ... [project.urls] Homepage = "https://github.com/pypa/sampleproject" Issues = "https://github.com/pypa/sampleproject/issues" を変えたい.pip install sphinxし, (.venv_mypackage) WorkingDirectory$ sphinx-quickstart docs を打つと, Sphinx 8.1.3 クイックスタートユーティリティへようこそ。 以下の設定値を入力してください(Enter キーのみ押した場合、 かっこで囲まれた値をデフォルト値として受け入れます)。 ... ... ... と表示されるので,案内に従って設定. 続いて,SphinxがHTMLを作成できるか確認する.これには, (.venv_mypackage) WorkingDirectory$ sphinx-build -M html docs/source docs/build を実行する. Sphinx v8.1.3 を実行中 ... ... ... HTMLページはdocs/build/htmlにあります。 と返答されれば,docs/build/htmlが作成される.その後, (.venv_mypackage) WorkingDirectory$ python -m http.server 8000 --directory docs/build/html を叩き,ブラウザで," localhost "に飛べば,以下が確認できる. !image.png 表示されているのは,docs/source/index.rstの内容であり,自動生成されたものをそのままにしている. 続いて,documentationを(慣れのあるmarkdownで)整備してゆくため, (.venv_mypackage) WorkingDirectory$ pip install --upgrade myst-parser し,docs/source/conf.pyを以下のように編集する. # Configuration file for the Sphinx documentation builder. # # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- import sys from pathlib import Path ROOT_DIR = Path(__file__).resolve().parents[2] SRC_DIR = ROOT_DIR / "src" sys.path.insert(0, str(SRC_DIR)) # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = 'example_package_ShotaDeguchi' copyright = '2026, Shota Deguchi' author = 'Shota Deguchi' release = '0.0.1' # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ "sphinx.ext.autodoc", "myst_parser", # support markdown files ] templates_path = ['_templates'] exclude_patterns = [] # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = 'alabaster' html_static_path = ['_static'] さらに,慣れのあるmarkdownを利用するため, (.venv_mypackage) WorkingDirectory$ mv docs/source/index.rst docs/source/index.md し,sourceディレクトリ内に (.venv_mypackage) WorkingDirectory$ touch docs/source/installation.md (.venv_mypackage) WorkingDirectory$ touch docs/source/usage.md (.venv_mypackage) WorkingDirectory$ touch docs/source/api.md を作成する.これらの内部に各種必要な情報をmarkdown形式で記入し, (.venv_mypackage) WorkingDirectory$ python -m sphinx -b html -E -a docs/source docs/build/html (.venv_mypackage) WorkingDirectory$ python -m http.server 8000 --directory docs/build/html で再度ビルドし,httpを確認すると,以下. !image.png Web公開 以上でローカルでの確認は終わり,Web上で一般公開に進む.通常通り,add, commit, pushする. (.venv_mypackage) WorkingDirectory$ git add . (.venv_mypackage) WorkingDirectory$ git commit -m "add sphinx documentation" (.venv_mypackage) WorkingDirectory$ git push 続いて,GitHubリポジトリの,Settings > Pages > Build and deployment > Sourceで,GitHub Actionsを選択する. !image.png 次いで,.github/workflows/docs.ymlを作成し, (.venv_mypackage) WorkingDirectory$ mkdir -p .github/workflows (.venv_mypackage) WorkingDirectory$ touch .github/workflows/docs.yml 内部に以下を書き込む(Sphinxの説明と違うのが気になったが,理解が追い付かなかったので,一旦GPTの言う通りにした). name: Build and deploy Sphinx documentation on: push: branches: - main workflow_dispatch: permissions: contents: read pages: write id-token: write concurrency: group: pages cancel-in-progress: true jobs: deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install documentation dependencies run: python -m pip install sphinx myst-parser - name: Build documentation run: sphinx-build -b html docs/source docs/build/html - name: Upload Pages artifact uses: actions/upload-pages-artifact@v3 with: path: docs/build/html - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v4 その後,作成したYAMLをpushする. (.venv_mypackage) WorkingDirectory$ git add .github/ (.venv_mypackage) WorkingDirectory$ git commit -m "add GitHub Pages deployment workflow (./github/workflows/docs.yml)" (.venv_mypackage) WorkingDirectory$ git push origin main すると,GitHubリポジトリのActionsにworkflowというものが追加されていて, !image.png 先程のcommitメッセージの項目に緑色のチェックが付いているので,このworkflowは正常に実行された,という意味らしい(workflowが何を指すか理解し切れていない). 次いで,Settings > Pagesを見ると,「Your site is live at ...」となっており, !image.png これを踏むと,以下が公開されている. !image.png 情報更新 公開したバージョンでは,/src/example_package_ShotaDeguchi/example.pyに def add_one(number): """ Adds one to the given number. Parameters ---------- number : int or float The number to which one will be added. Returns ------- int or float The result of adding one to the input number. """ return number + 1 しか実装していない.機能を追加してみる. def add_one(number): """ Adds one to the given number. Parameters ---------- number : int or float The number to which one will be added. Returns ------- int or float The result of adding one to the input number. """ return number + 1 def multiply(number1, number2): """ Multiplies two numbers. Parameters ---------- number1 : int or float The first number to multiply. number2 : int or float The second number to multiply. Returns ------- int or float The product. """ return number1 * number2 関数multiplyを追加した.動作確認をする. (.venv_mypackage) WorkingDirectory$ python -c "from src.example_package_ShotaDeguchi.example import add_one; print(add_one(7))" 8 (.venv_mypackage) WorkingDirectory$ python -c "from src.example_package_ShotaDeguchi.example import multiply; print(multiply(3, 4))" 12 (.venv_mypackage) WorkingDirectory$ python -c "from src.example_package_ShotaDeguchi.example import multiply; print(multiply(3, 5))" 15 再度ビルドし,ローカルで確認. (.venv_mypackage) WorkingDirectory$ sphinx-build -M html docs/source docs/build (.venv_mypackage) WorkingDirectory$ python -m http.server 8000 --directory docs/build/html すると,以下の通り,新たな関数のdocumentationが追記されている(docstringに書いた通り). !image.png !image.png ただし,Web公開はされていないから(同じタイミングでGitHub Pagesを確認すると以下), !image.png add, commit, pushまで終えてから再度確認すると,以下. !image.png PyPIの更新 再確認を,と思い,scratchpadでテストしたが,multiply()が無い. !image.png ローカルで関数の動作をテストし,Documentationも追加したが,pypiに上げているバージョンと,ローカルにあるパッケージのバージョンに乖離があるため,と予想.したがって,これをpypiに上げ直す必要がある,と考えた. 手順1:バージョン番号の変更 まず,pyproject.tomlに記載しているバージョンを変更する. [build-system] requires = ["setuptools"] build-backend = "setuptools.build_meta" [project] name = "example_package_ShotaDeguchi" version = "0.0.2" # "0.0.1" -> "0.0.2" authors = [ { name = "Shota Deguchi", email = "shotadeguchio2o5@gmail.com" }, ] description = "A small example package" readme = "README.md" requires-python = ">=3.10" classifiers = [ "Programming Language :: Python :: 3", "Operating System :: OS Independent", ] license = "MIT" license-files = ["LICEN[CS]E*"] [project.urls] Homepage = "https://github.com/pypa/sampleproject" Issues = "https://github.com/pypa/sampleproject/issues" 合わせて,conf.pyに記載のバージョンも上げておく(pyproject.tomlに記載のバージョンがpypiで公開されるバージョン番号,conf.pyに記載のバージョン番号がSphinxで作成したDocumentationで公開されるバージョン番号). # Configuration file for the Sphinx documentation builder. # # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html # -- Path setup -------------------------------------------------------------- import sys from pathlib import Path ROOT_DIR = Path(__file__).resolve().parents[2] SRC_DIR = ROOT_DIR / "src" sys.path.insert(0, str(SRC_DIR)) # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = 'example_package_ShotaDeguchi' copyright = '2026, Shota Deguchi' author = 'Shota Deguchi' release = '0.0.2' # '0.0.1' -> '0.0.2' # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ "sphinx.ext.autodoc", "sphinx.ext.napoleon", # support Google and NumPy style docstrings "myst_parser", # support markdown files ] source_suffix = { ".rst": "restructuredtext", ".md": "markdown", } templates_path = ['_templates'] exclude_patterns = [] # -- Options for HTML output ------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output html_theme = 'alabaster' html_static_path = ['_static'] 手順2:新たなバージョンとしてdistを作成 ビルドし直して,新たなdistributionを作り直す. (.venv_mypackage) WorkingDirectory$ python -m build * Creating isolated environment: venv+pip... * Installing packages in isolated environment: ... ... ... Successfully built example_package_shotadeguchi-0.0.2.tar.gz and example_package_shotadeguchi-0.0.2-py3-none-any.whl (.venv_mypackage) WorkingDirectory$ ls dist/ example_package_shotadeguchi-0.0.1-py3-none-any.whl example_package_shotadeguchi-0.0.2-py3-none-any.whl example_package_shotadeguchi-0.0.1.tar.gz example_package_shotadeguchi-0.0.2.tar.gz バージョン0.0.2のdistributionができている(このときの番号は,tomlの中身を参照しているらしい). 手順3:新たなバージョンをPyPIへ 手順2で作成したバージョン0.0.2のdistributionをPyPIへ上げる.ここでは,新たなバージョン0.0.2のみ上げることに注意する(当該のAPI Tokenが要求される,保管しておかなければならないが,どのような保管方法が良いだろう?). (.venv_mypackage) WorkingDirectory$ python -m twine check dist/*-0.0.2* Checking dist/example_package_shotadeguchi-0.0.2-py3-none-any.whl: PASSED Checking dist/example_package_shotadeguchi-0.0.2.tar.gz: PASSED (.venv_mypackage) WorkingDirectory$ python -m twine upload dist/*-0.0.2* ... ... ... Enter your API token: Uploading example_package_shotadeguchi-0.0.2-py3-none-any.whl 100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.8/5.8 kB • 00:00 • ? Uploading example_package_shotadeguchi-0.0.2.tar.gz 100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.2/5.2 kB • 00:00 • ? View at: https://pypi.org/project/example-package-ShotaDeguchi/0.0.2/ すると,0.0.2がアップロードされている. !image.png !image.png 手順4:scratchpadで動作確認 scratchpadのランタイムを再起動し,pip installし直すところから再度実行. !image.png 素晴らしい. 終わりに こちらができた(馬鹿らしいが,READMEを変更したものをversion 0.0.3とし,その後pyproject.tomlの情報を適切なものに張り替えてversion 0.0.4とした). GitHubにcommit・pushすることでソースコードとDocumentationは更新できるが,PyPIはそれと切り分けられたところにあるため,別途ビルド・アップロードをしなければならない,ということを理解した. 何事も経験.

Latest stargazers

The last 10 distinct accounts we observed this year.

Most active participants

PR, issue, comment & review events in the past year.

Packages

8
PackageVersionDownloads · 30dTrend · 30d
v1.0.0
≥9
v1.0.0
≥11
v1.0.0
≥17
v1.0.0
≥14
v1.0.0
≥31
v1.0.0
≥11
v1.0.0
≥13
shopv0.0.2
v0.0.2
≥112

Live mentions badge

Show how many posts mention your project in the last 30 days.

Live mentions · last 30 days
pypa/sampleproject mentions in the last 30 days