【发布时间】:2012-12-19 10:09:38
【问题描述】:
我有一堆简单的 Python 脚本,带有简单的表达式[1],例如:
C = A+B
D = C * 4
我需要执行它们,但最重要的是我需要知道我依赖的对象是什么;在前一种情况下,对象 A 和 B 是外部依赖项。例如。鉴于我在一个名为 source 的 var 中有以前的代码,我希望能够:
deps = { "A" : 1 , "B": 2}
exec source in deps
所以知道如何构建字典是非常有必要的deps。
我潜入了 ast Python 模块,但我不知道。
[1] 简单的数学聚合,在一定程度上 for 个周期,仅此而已。
【问题讨论】:
-
我猜你可能很顽皮并抓住了前几个 NameErrors
-
我很顽皮,没有提到我所做的与@JakobBowyer 建议的完全一样;)
-
一个 AST 是不够的。如果没有完整的 AST、全名解析和认真的数据流分析,除了非常琐碎的脚本之外,您将无法使其工作。因为 Python 是一种动态语言,所以即使是严肃的数据流分析也可能无法提供像样的答案。如果您愿意将“Python”代码限制为非常简单,则可以构建一个可靠的分析器。您的问题是您的用户不会注意您将施加的约束。因此,除非用户只是您,否则您不太可能获得好的结果。
-
谢谢@IraBaxter,我很清楚你的主张;我已经在考虑数据流解决方案:我正在构建这些脚本的图表...
-
您需要在“简单”表达式中允许什么的准确描述是什么?没有这个限制,你就得不到任何有用的建议。
标签: python dependencies abstract-syntax-tree