Files
MoviePilot/app/runtime/dependencies.py
T
InfinityPacer 326b5cf3ad feat: 新增 Python 3.14t 自由线程镜像 (#6434)
* fix(resource): select free-threaded extension ABI

* chore(deps): require moviepilot-rust 0.2.9

* perf: add free-threaded runtime comparison

* feat: add free-threaded runtime profile

* chore(deps): require moviepilot-rust 0.3.0

* test: isolate system endpoint import graph

* fix(docker): preserve runtime profile during recovery

* feat(runtime): expose active GIL state

* feat(plugin): log GIL fallback attribution

* test: refresh runtime observability dependency baseline

* fix(plugin): validate the active uv runtime profile

* test(runtime): expand free-threaded benchmark evidence

* docs(runtime): define v3t governance gates

* test(runtime): separate rust benchmark modes

* docs: sync free-threaded architecture baseline

* perf: add PostgreSQL driver comparison

* docs(runtime): record final free-threaded evidence

* fix(runtime): converge dual-profile dependency verification

* fix(runtime): scope Python 3.14 warning filter

* fix(runtime): match actual oss2 syntax warning

* docs(runtime): refresh free-threaded benchmark evidence

* test(architecture): refresh runtime dependency baseline

* ci: skip unused Trivy Java database

* build: exclude local verification artifacts

* docs(runtime): refresh PostgreSQL driver benchmarks

* docs(runtime): record plugin restore acceptance

* docs(runtime): record amd64 candidate acceptance

* ci: pin beta image publisher action

* test(architecture): merge runtime dependency baseline

* feat(runtime): expose Python GIL status

* docs(runtime): document Python runtime status fields
2026-08-24 17:48:14 +08:00

57 lines
1.8 KiB
Python

"""按解释器 ABI 选择主程序运行依赖 profile。"""
from __future__ import annotations
import tomllib
from collections.abc import Iterable
from pathlib import Path
from app.foundation.environment import is_free_threaded_runtime
RUNTIME_STANDARD_GROUP = "runtime-standard"
RUNTIME_FREE_THREADED_GROUP = "runtime-free-threaded"
def runtime_dependency_group() -> str:
"""返回当前解释器必须使用的互斥运行依赖组。"""
if is_free_threaded_runtime():
return RUNTIME_FREE_THREADED_GROUP
return RUNTIME_STANDARD_GROUP
def runtime_sync_arguments() -> tuple[str, ...]:
"""返回 uv sync 选择当前运行依赖组所需的稳定参数。"""
return "--no-default-groups", "--group", runtime_dependency_group()
def iter_runtime_requirement_strings(project_file: Path) -> Iterable[str]:
"""读取主项目依赖及当前运行 profile 的根依赖声明。"""
with project_file.open("rb") as file:
document = tomllib.load(file)
project = document.get("project") or {}
for requirement in project.get("dependencies") or ():
if isinstance(requirement, str):
yield requirement
groups = document.get("dependency-groups") or {}
for requirement in groups.get(runtime_dependency_group()) or ():
if isinstance(requirement, str):
yield requirement
def iter_runtime_profile_requirement_strings(project_file: Path) -> Iterable[str]:
"""读取当前解释器 profile 的根依赖声明。"""
with project_file.open("rb") as file:
document = tomllib.load(file)
groups = document.get("dependency-groups") or {}
for requirement in groups.get(runtime_dependency_group()) or ():
if isinstance(requirement, str):
yield requirement
if __name__ == "__main__":
print(runtime_dependency_group())