3ad29356c9
集成通用机器人数值接口、本机控制桥、LeRobot 插件和统一键盘遥操作。采用离线 CoACD 全臂碰撞配方 revision 4、局部装配区切分与结构自接触,限制直接关节位姿写入并保留安全看门狗。同步版本号、变更记录、来源许可证和兼容性验证。
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""安装经验证的 CPU LeRobot 环境;不修改当前解释器、上游源码或训练环境。"""
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
import venv
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--venv", type=Path, default=ROOT / "build/venvs/lerobot")
|
|
args = parser.parse_args()
|
|
target = args.venv.resolve()
|
|
if sys.version_info[:2] != (3, 12):
|
|
parser.error("此兼容环境仅验证 Python 3.12,请使用 Python 3.12 执行安装脚本")
|
|
if not target.is_relative_to(ROOT / "build") or target == Path(sys.prefix).resolve():
|
|
parser.error("目标必须位于仓库 build/ 下,并且不能是当前环境")
|
|
env = {**os.environ, "PYTHONNOUSERSITE": "1", "PYTHONPATH": ""}
|
|
if not (target / "bin/python").exists():
|
|
venv.EnvBuilder(with_pip=True).create(target)
|
|
python = str(target / "bin/python")
|
|
prefix = subprocess.check_output(
|
|
[python, "-I", "-c", "import sys; print(sys.prefix)"], env=env, text=True
|
|
).strip()
|
|
config = (target / "pyvenv.cfg").read_text().lower()
|
|
if Path(prefix).resolve() != target or "include-system-site-packages = false" not in config:
|
|
parser.error("目标不是独立 venv;拒绝对共享/其他 Python 环境执行 pip")
|
|
|
|
def run(*arguments):
|
|
subprocess.run([python, "-m", "pip", *arguments], env=env, cwd=ROOT, check=True)
|
|
|
|
run(
|
|
"install",
|
|
"--index-url",
|
|
"https://download.pytorch.org/whl/cpu",
|
|
"torch==2.11.0+cpu",
|
|
"torchvision==0.26.0+cpu",
|
|
)
|
|
constraints = "integrations/lerobot/requirements-cpu.txt"
|
|
run("install", "-r", constraints)
|
|
run(
|
|
"install",
|
|
"--no-build-isolation",
|
|
"-c",
|
|
constraints,
|
|
"-e",
|
|
"control_bridge",
|
|
"-e",
|
|
"integrations/lerobot",
|
|
)
|
|
run("check")
|
|
# Record versions, not pip freeze's private VCS origins or credentials.
|
|
result = subprocess.check_output(
|
|
[python, "-m", "pip", "list", "--format=json"], env=env, text=True
|
|
)
|
|
report = ROOT / "build/lerobot-environment.json"
|
|
report.write_text(json.dumps({"python": sys.version, "packages": json.loads(result)}, indent=2))
|
|
print(f"完成:{python}\n版本记录:{report}\n请在此环境执行插件测试和示例。")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|