0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python製CLI/GUIツールをPyPIで公開するまでの完全ガイド

0
Posted at

この記事では、MarkdownをPDFに変換するPython製ツール md2pdf_advanced を例に、PyPI (Python Package Index) にパッケージを公開するまでの手順を紹介します。

🎯 対象読者

  • 自作のPythonライブラリやCLIツールを配布したい人
  • StreamlitなどでGUI付きツールも含めて配布したい人
  • twinepyproject.tomlを使ったモダンな公開フローを知りたい人

📁 1. ディレクトリ構成を整える

md2pdf_advanced/
├── md2pdf_advanced/
│   ├── __init__.py
│   ├── converter.py
│   ├── cli.py
│   ├── gui.py
│   └── styles/
│       ├── default.css
│       ├── zenn.css
│       └── github.css
├── example.md
├── README.md
├── requirements.txt
└── pyproject.toml

🛠 2. pyproject.toml を用意

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "md2pdf_advanced"
version = "0.1.0"
description = "Convert Markdown to PDF via CLI and GUI (with optional AI summary)"
readme = "README.md"
requires-python = ">=3.8"
license = {text = "MIT"}
authors = [{ name = "Your Name", email = "your@email.com" }]
dependencies = [
    "markdown",
    "weasyprint>=60.0",
    "jinja2",
    "typer[all]",
    "streamlit"
]

[project.scripts]
md2pdf = "md2pdf_advanced.cli:app"

🧪 3. 動作確認(CLI & GUI)

# CLI
python -m md2pdf_advanced.cli convert example.md --style zenn

# GUI(Streamlit)
PYTHONPATH=. streamlit run md2pdf_advanced/gui.py

🔐 4. PyPI アカウントと API トークンの取得

  1. PyPI に登録
  2. API Token 発行
    • トークン名例: md2pdf-advanced-token
    • 生成される pypi-... トークンを控える

📦 5. パッケージのビルド

pip install build twine
python -m build

dist/ ディレクトリに .whl.tar.gz ができていればOK!


🚀 6. PyPI へアップロード

twine upload dist/*
  • ユーザー名: __token__
  • パスワード: pypi-...(APIトークン)

❗エラー "403 Forbidden" が出た場合は、パッケージ名の重複を疑おう


💡 7. よくあるエラー

エラー内容 原因 対策
403 Forbidden すでに他人が登録しているパッケージ名 パッケージ名を変更する(例: md2pdf_advanced
相対import失敗 python 実行時の構造問題 python -m パッケージ名.モジュール名 形式で実行
Streamlit GUIが動かない python で GUI を起動 streamlit run gui.py を使う

✅ 8. 公開後の確認

pip install md2pdf_advanced
md2pdf convert example.md --style github

📝 まとめ

  • モダンな Python パッケージは pyproject.toml ベースで管理するのが主流
  • GUIアプリも Streamlit を使えば配布可能
  • 公開時は PyPI に未登録の名前 を選ぶことが重要

🙌 参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?