如何在Quarto中引入外部Python脚本并执行,同时访问其变量?
解决Quarto中引入外部Python脚本并访问变量的问题
你遇到的NameError是因为当前代码单元格的命名空间无法访问外部脚本执行后生成的变量。以下是几种可靠的解决方法:
方法1:使用IPython魔法命令%run执行脚本
直接在代码单元格中用%run命令运行外部脚本,脚本内的变量会直接进入当前会话的全局命名空间:
修改test.qmd的第一个Python单元格:
#| echo: true #| eval: true %run lm.py
方法2:通过Python内置函数读取并执行脚本
如果不想依赖IPython魔法命令,可以用exec函数读取脚本内容并执行:
#| echo: true #| eval: true with open("lm.py", "r", encoding="utf-8") as f: exec(f.read())
修改后的完整示例
test.qmd
--- format: pdf execute: cache: false --- ```{python} #| echo: true #| eval: true %run lm.py
print(model.summary())
### lm.py(保持不变) ```python import statsmodels.api as sm import pandas as pd mtcars = sm.datasets.get_rdataset('mtcars').data model = sm.formula.ols('am ~ cyl + mpg', data = mtcars).fit()
原写法失效的原因
你原本使用#| file: lm.py的方式,Quarto只是将脚本内容加载到单元格中,但部分场景下(如执行环境隔离)变量不会被保留到后续单元格的命名空间。而%run或exec是直接在当前执行会话中运行脚本,变量会被持久化,后续单元格可以直接访问。
内容的提问来源于stack exchange,提问作者Carlos Luis Rivera
相关产品推荐
相关产品推荐

