pyproject.toml
Rama master · réplica de lectura del repositorio original.
[build-system]
requires = ["setuptools==84.2.1"]
build-backend = "setuptools.build_meta"
[project]
name = "peach"
dynamic = ["version"]
description = "Local-first media library, behavior ledger, and discovery application"
readme = "README.md"
# SPDX 表达式必须和 `LICENSE` 全文一致,换许可证要先改 ADR-0023 第 4 阶段;
# `tests/test_repo_hygiene.py` 钉住 LICENSE 那一侧。
license = "AGPL-3.0-or-later"
requires-python = ">=3.14"
# `Private :: Do Not Upload` 不是修饰语:Peach 只自托管、不发 PyPI
# (`.github/workflows/test.yml`),PyPI 拒收带这枚 classifier 的包,
# 所以误跑 `twine upload` 会在传上去之前就被挡住。
classifiers = [
"Private :: Do Not Upload",
"Environment :: Web Environment",
"Operating System :: MacOS",
"Operating System :: Microsoft :: Windows",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.14",
"Topic :: Database :: Front-Ends",
"Topic :: Multimedia :: Video",
]
dependencies = [
"itsdangerous==2.2.0",
"filelock==4.2.9",
"tldextract==5.4.0",
"APScheduler==3.11.3",
"beautifulsoup4==4.15.0",
"bencode2==0.3.38",
"browserexport==0.4.4",
"pyahocorasick==2.3.1",
"curl_cffi==0.17.0",
"fastapi==0.162.2",
# grpcio 与 protobuf 给云下载调 CloudDrive2 的 gRPC 接口(`downloads_clouddrive.py`)。
# 消息代码由 grpcio-tools 1.84.0 生成后提交,它自带的 protoc 对应 protobuf 7.35.1,
# 运行时 protobuf 必须同一大版本且不低于它。
"grpcio==1.85.1",
"httpx==0.28.1",
"m3u8==6.0.0",
"pillow==13.0.0",
"protobuf==7.36.2",
"psutil==7.2.2",
"pystray==0.19.5",
# 配置页让手机扫码下载本机 CA(`routes_configuration.certificate_payload`);只取模块矩阵,不走 Pillow 出图。
"qrcode==8.2",
"pydantic==2.14.3",
"resvg-py==0.5.0",
"sentry-sdk==2.74.0",
"socksio==1.0.0",
"starlette==1.10.0",
"torznab==0.2.1",
"tzlocal==5.4.5",
"uvicorn==0.54.0",
"watchdog==7.1.0",
"zeroconf==0.154.0",
"smbprotocol==1.17.0",
# 应用内更新校验发布签名(Ed25519,ADR-0137)。
"cryptography==50.0.2",
]
[project.urls]
Homepage = "https://github.com/peach-mitao/peach"
Repository = "https://github.com/peach-mitao/peach"
Issues = "https://github.com/peach-mitao/peach/issues"
[project.scripts]
peach = "peach.error_reporting:cli_main"
peach-tray = "peach.error_reporting:tray_main"
[project.optional-dependencies]
dev = [
"filelock==4.2.9",
"httpx2==2.16.0",
"ruff==0.17.4",
"seiso==0.4.0",
]
build = [
"pyinstaller==6.22.3",
"dmgbuild==1.6.7; sys_platform == 'darwin'",
]
macos = ["pyobjc-framework-Cocoa==12.2.2; sys_platform == 'darwin'"]
# numpy 本来就是 opencv 的传递依赖,这里显式钉住:`face_detect.decode` 直接 import 它
# 把字节喂给 `cv2.imdecode`,被 import 的外部模块必须有声明的归属。
vision = ["opencv-python-headless==5.0.0.93", "numpy==2.5.4"]
maintenance-115 = ["p115client==0.0.9.7.2"]
# 字形复核与英文媒体文件名分词工具。
naming = [
"opencc==1.4.2",
"wordninja-enhanced==3.2.0",
]
[tool.setuptools]
package-dir = {"" = "src"}
[tool.uv]
# 只设下限:uv 是工具不是依赖,它的版本不进依赖图(scripts/test_runner.py 的
# dependency_inputs 也不算它)。Homebrew、winget 与官方脚本都只装最新版,写死等号
# 会让每台新机器上的 uv 连 `--no-project` 的钩子都拒绝运行;CI 想复现就在 setup-uv 里给 version。
required-version = ">=0.12.13"
cache-keys = [{file = "pyproject.toml"}, {file = "setup.py"}, {file = "src/peach/__init__.py"}, {file = "README.md"}]
[tool.setuptools.dynamic]
version = {attr = "peach.__version__"}
[tool.setuptools.packages.find]
where = ["src"]
[tool.ruff]
target-version = "py314"
extend-exclude = ["src/peach/downloads_clouddrive_pb2.py"]
[tool.ruff.lint]
select = ["F", "PLE", "B006", "B012", "B018", "B023", "W605"]