oh-my-pi eval Python 单元格里的 IPython 魔咒:%pip、%cd、%%bash 等格内操作怎么用 oh-my-pi eval Python 单元格里的 IPython 魔咒%pip、%cd、%%bash 等格内操作怎么用【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi在 oh-my-pi 的 coding agent 里跑 Python 时eval工具一次调用执行一个单元格cell而 Python 后端是一个常驻内核同一会话中多次language: py的调用会复用同一个 kernel变量、已导入的模块和工作目录都会保留。这个 kernel 内置的 runner 在解析前会把 IPython 风格的魔咒magic改写成普通 Python 调用因此你可以直接在单元格里写%pip install ...、%cd、%%bash这类格内操作不需要 Jupyter 网关也不需要额外 pip 依赖。本文依据 docs/python-repl.md 与 docs/tools/eval.md说明这些魔咒的写法、生效条件和如何判断结果。准备条件Python 3.10 与后端启用Runner 使用 Python 3.10 语法str | None所以实际要求是 Python 3.10。后端设置eval.py默认为true环境变量PI_PY0可以为当前进程禁用 Python 后端。omp setup python --check会报告实际解析到的解释器。如果 PATH 上没有 Python需要安装系统 Python 3.10或在~/.omp/python-env放置一个兼容的 venv。解释器的自动解析顺序为活动/可定位的 venvVIRTUAL_ENV→CONDA_PREFIX→cwd/.venv、cwd/venv→ 托管 venv~/.omp/python-env→ PATH 上的python或python3当python.interpreter设置明确指定了可执行文件时跳过这套自动解析。这些配置在 docs/settings.md 的 “Shell, eval, and LSP” 一节有完整 YAML 示例。魔咒在单元格里怎么写eval 工具的输入参数就是一个单元格{language:py,title:install dep,code:%pip install requests,timeout:120}code字段原样承载单元格内容。魔咒直接写在其中规则是行级魔咒%name args如%cd ~/projects/data单元格魔咒%%name args单独成行其下的行构成单元格主体如%%bash赋值形式同样可用var %name args和var !cmd未注册的魔咒名会在单元格内抛出NameError: UsageError: ...未注册的单元格魔咒抛出Cell magic function %%name not found——这两个报错是直接判断“这个魔咒不支持”的信号魔咒注册表见 runner.py。支持的魔咒一览下表是 runner 实际注册的完整集合来自 docs/python-repl.md 的 Magics 章节魔咒效果%pip args执行python -m pip args流式输出新装包会从sys.modules逐出%cd pathos.chdir(path)支持~展开发出状态事件%pwd返回os.getcwd()%ls [path]返回sorted(os.listdir(path))%env [KEY[VAL]]列出、读取或设置环境变量%set_env KEY VALUE设置os.environ[KEY]%time expr/%timeit expr计时表达式发出含耗时毫秒的状态事件%who/%whos列出用户命名空间中的名称%reset清空用户全局变量并重新注入 prelude%load path把文件读入一个新单元格并执行%run pathrunpy.run_path执行并把 globals 合并回内核%%bash通过bash运行单元格主体%%capture [name]运行主体stdout/stderr 捕获进name%%timeit计时单元格主体%%writefile path把单元格主体写入文件!cmd/var !cmd通过 subprocess shell 运行命令返回带.n/.s助手的 SList 风格结果用 %pip 在单元格内装包并立即导入%pip args等价于用当前解释器执行python -m pip args输出是实时流式的。文档明确说明新安装的包会被逐出sys.modules因此紧接着的import会拿到新装的版本可以在同一个单元格里完成安装与使用%pip install requests import requests print(requests.__version__)安装较大包时可能超过单元格默认 30 秒的超时。此时在这次调用里提高timeout参数非零值会被限制在 1..3600 秒并受tools.maxTimeout上限约束或传0禁用单元格超时。%cd 与 %env工作目录和环境变量Python 单元格运行在会话 cwd 中。%cd改变的是常驻内核的工作目录并会发出状态事件TUI 以结构化状态渲染%pwd返回os.getcwd()%ls [path]返回排序后的目录列表%env与 prelude 的env()语义一致支持列出、读取和设置环境变量。%cd ~/projects/data %pwd files %ls %set_env RUN_ENVprod一个注意点这些状态是否跨调用保留取决于内核复用模式。python.kernelMode默认是session——内核按会话 id、规范化 cwd 和解释器为键复用%cd的效果会带入下一次调用改成per-call后每次调用都新建并关闭内核跨调用不再保留任何状态。%%bash 与 !cmd格内执行 shell唯一的 shell 单元格魔咒是%%bash——它把单元格主体交给bash执行。%%sh不存在写错名字会得到Cell magic function %%name not found%%bash git status --short单条命令可以用!cmd或赋值形式var !cmd通过 subprocess shell 运行返回带.n/.s助手的 SList 风格结果out !ls display(out)注意这些操作有真实副作用%pip会向当前解释器的环境安装包%%bash与!cmd会直接执行 shell 命令%%writefile会写文件。它们运行在你当前会话解释到的 Python 环境中使用方式与使用 shell 工具一样需要心里有数。计时、捕获与状态管理%time expr/%timeit expr计时表达式耗时以毫秒形式发出状态事件%%timeit计时整个单元格主体%%capture [name]运行主体并把 stdout/stderr 捕获进name不刷屏%%writefile path把单元格主体写入文件%load path/%run path从文件加载代码后者会把 globals 合并回内核%who/%whos查看当前命名空间里的名称用于确认前一个单元格的定义是否还在%reset清空用户全局变量并重新注入 prelude。状态清理有两条路径单元格内的%reset只清 Python 命名空间而eval调用参数里的reset: true会在这次调用前重建所选语言的常驻运行时其他语言运行时不受影响。另外如果某个单元格中途报错错误之前已完成的定义和修改仍会留在内核内存里——状态可疑时用reset: true重跑是文档给出的手段。验证结果与判断错误正常情况魔咒和普通代码一样通过 stdout/stderr 流回输出%cd、%pwd、%time等发出的状态事件以结构化状态渲染可用于确认目录切换或耗时。魔咒名不在支持列表中单元格报NameError: UsageError: ...行级或Cell magic function %%name not found单元格级。单元格异常结果中带 traceback 文本非零退出会追加Command exited with code N并标记error。运行挂起直至超时取消先发SIGINT再升级处理session 模式下如果内核被杀下一次请求会重建内核。对确实耗时的操作正解是调大timeout或设0。Python 后端整体不可用时py调用会报告可用性错误检查eval.py、PI_PY以及 PATH 上是否有python/python3。边界与限制交互式 stdin 不受支持runner 不转发input()提示调用input()的代码会阻塞直到被取消需要数据时请编程式传入。内核的环境变量经过白名单过滤保留PATH、HOME、locale 变量、VIRTUAL_ENV、PYTHONPATH等核心变量及LC_、XDG_、PI_前缀常见 API key 会被剥离因此%env里能看到的环境变量就是这个过滤后的集合。Python 调用在一个会话内是独占的调用不会重叠一次调用就是一个单元格增量步骤要拆成多次调用。富显示PIL、pandas、plotly、matplotlib 图像等通过 MIME bundle 分发matplotlib 以MPLBACKENDAgg离屏渲染并在每个单元格后自动导出 PNG——这与魔咒无关但解释了为什么display()能出图。魔咒之外prelude 还提供display()、read()/write()、tool.name()、agent()、completion()等格内助手完整契约见 docs/tools/eval.md后端可用性与环境变量对照见 docs/environment-variables.md。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考