mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-29 03:56:43 +08:00
* 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
57 lines
1.8 KiB
Python
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())
|