A minimal, secure Python interpreter written in Rust for use by AI
📖 README
📊 Project Info
- Language
- Rust
- Stars
- ⭐ 2,698
- Forks
- 68
- Today
- +456
- Ranking
- #2
- Collection
- Overall
- Trending Date
- February 8, 2026
- Last Push
- 2/8/2026
5分钟上手 Monty:极简安全的Python解释器
本指南将帮助你在5分钟内安装Monty并运行第一个AI生成的Python代码
🖥️ OS
⚙️ Runtime
🔧 Tools
📝 Steps
安装Monty
使用pip安装pydantic-monty包
安装Monty Python包
$ pip install pydantic-monty创建第一个Monty脚本
创建一个简单的Python文件来测试Monty
创建测试文件
$ echo "import pydanticmonty
code = '''
x = 41
print(f'Hello Monty! The answer is {x + 1}')
'''
m = pydanticmonty.Monty(code)
result = m.run()
print(f'Output: {result.output}')" > monty_test.py运行Monty脚本
执行测试脚本,验证Monty是否正常工作
运行Monty测试脚本
$ python monty_test.py尝试外部函数调用
创建一个更复杂的示例,展示Monty如何与外部函数交互
创建外部函数示例
$ echo "import pydanticmonty
# 定义外部函数
def fetch(url):
return f'Fetched data from {url}'
code = '''
data = fetch('https://example.com')
print(f'Result: {data}')
'''
m = pydanticmonty.Monty(code, externalfunctions=['fetch'])
result = m.run()
print(f'Final output: {result.output}')" > monty_external.py运行外部函数示例
$ python monty_external.py✅ 验证成功
如果所有步骤都成功执行,你将看到以下结果:
- ✓成功安装pydantic-monty包
- ✓Monty能够执行基本的Python代码
- ✓Monty能够调用外部函数并返回结果
- ✓没有出现权限错误或导入错误
⚡ Quick Tips
🔍 Troubleshooting
❓ ModuleNotFoundError: No module named 'pydanticmonty'
→ 确保已正确安装:pip install pydantic-monty,注意包名中的连字符
❓ Permission denied 错误
→ 使用 pip install --user pydantic-monty 或 sudo pip install pydantic-monty
❓ Monty不支持某些Python语法
→ Monty支持Python子集,主要用于AI生成的简单代码。复杂功能需要通过外部函数实现
🎯 Next Steps
查看官方示例
访问GitHub仓库查看更多高级用法示例
尝试类型检查
使用typecheck=True参数启用Python类型提示检查
实验快照功能
尝试使用dump()和load()方法保存和恢复解释器状态
Difficulty
初级
Est. Time
3-5小时
Target Audience
对AI Agent开发、Python沙箱环境或Rust语言感兴趣的开发者,特别是希望在自己的应用中安全执行LLM生成代码的开发者。
🎯 What You'll Learn
学会使用Monty在你的应用中安全地执行AI生成的Python代码,并理解其核心概念如外部函数调用、状态快照等。
📋 Prerequisites
Monty是一个Python解释器,你需要理解Python的基本语法、函数定义和类型提示,才能编写和调试在Monty中运行的代码。
项目本身用Rust编写,但作为使用者,你主要通过Python绑定来调用。了解Rust有助于理解项目背景和高级用法,但不是使用它的必要条件。
需要能够使用pip安装包,并运行Python脚本。
📚 Resources
GitHub README
项目主页的README文件,包含了安装、核心示例和高级用法,是学习的第一手资料。
GitHub Issues 和 Discussions
查看已有的问题和讨论,可以了解常见的使用难题、已知限制和未来的开发方向。
Pydantic AI 文档(如果使用)
如果你计划将Monty用于Pydantic AI框架,需要查阅其官方文档来了解`CodeModeToolset`等的详细用法。
🗺️ Learning Phases
环境准备与初体验
安装Monty
在你的Python环境中,使用pip安装pydantic-monty包。命令:`pip install pydantic-monty`。
验证安装
创建一个简单的Python脚本(如test_monty.py),导入`pydanticmonty`模块。如果导入成功,说明安装正确。
核心概念与基础运行
运行第一段代码
参考README的第一个代码块,创建一个Monty实例,运行一段简单的Python代码(如`x + 1`),并通过`inputs`参数传入变量值。使用`m.run()`方法执行并打印结果。
理解外部函数调用
尝试README中关于`fetch(url)`的示例。创建一个模拟的`fetch`函数,在Python主程序中定义它,并通过`externalfunctions`参数让Monty知道可以调用它。使用`m.start()`和`resume()`来控制执行流程。
高级功能探索
体验类型检查
编写一段包含类型提示(如`def greet(name: str) -> str:`)的Python代码。在创建Monty实例时,设置`typecheck=True`。尝试传入错误类型的参数,观察类型检查是否生效。
实践状态快照
按照README的“Serialize execution state mid-flight”示例,完整走一遍流程:1. 启动执行到外部函数调用暂停。2. 使用`.dump()`保存状态。3. 使用`.load()`恢复状态。4. 使用`.resume()`继续执行。
结合AI Agent框架
参考README末尾的“AI Agent Example”,尝试理解`CodeModeToolset`和`Agent`的用法。虽然可能需要安装额外的AI框架(如pydantic-ai),但这一步旨在理解Monty如何集成到AI工作流中。
总结与调试
设计一个小项目
构思一个简单场景:例如,一个AI助手可以帮你计算(但只能使用你提供的`add`, `multiply`函数)或处理字符串。用Monty实现这个安全沙箱。
阅读错误信息与调试
故意在Monty运行的代码中制造一些错误:语法错误、调用未授权的外部函数、类型错误等。观察Monty返回的错误信息,学习如何定位问题。
⚠️ Common Mistakes
❌ 忘记在`externalfunctions`参数中声明外部函数名
✅ 在Monty代码中调用的每一个主机函数,都必须先在创建Monty实例时,在`externalfunctions`列表中进行声明,否则执行会报错。
❌ 混淆`inputs`和外部函数调用
✅ `inputs`用于在代码执行前传入简单的数据(如字符串、数字)。复杂的操作或需要访问外部资源的操作,应通过外部函数调用来实现。
❌ 试图在Monty中运行不受支持的Python语法或模块
✅ Monty是Python的一个子集。避免使用复杂的语言特性或尝试导入标准库/第三方库。所有“危险”操作都应通过你控制的外部函数提供。
❌ 对`start()`和`resume()`的流程理解不清
✅ `m.start()`会执行代码,直到遇到第一个外部函数调用或执行完毕。它返回一个“快照”对象。你必须调用这个快照对象的`.resume(returnvalue=...)`来提供外部函数的返回值,并继续执行。这是一个分步过程。
🚀 Next Steps
学完基础后可以继续探索的方向:1. 深入研究Monty的Rust源码,理解其解释器的工作原理和安全性实现。2. 将其集成到更复杂的AI Agent流水线或Web服务中。3. 探索性能极限,测试在大量并发或复杂代码下的表现。4. 关注项目更新,了解其对Python语法支持范围的扩大。