我使用ast
模块在python3中构建依赖关系图。如果要执行该导入语句,我如何知道将导入哪些文件?
答案 0 :(得分:1)
不是一个完整的答案,但这里有一些你应该注意的事项:
import A
,from A import B
,from A import *
,from . import A
,from .. import A
,from ..A import B
以及他们的将A
替换为子模块的版本。eval
可以使用导入来评估代码。如果您认为此类代码是依赖项,请由您自己决定。标准库modulefinder模块可能有帮助。
答案 1 :(得分:0)
正如评论中所建议的那样:其他答案是有效的,但其中一个基本问题是您的示例仅适用于“简单”脚本或文件:许多更复杂的代码将使用动态导入等内容:考虑以下内容:
path, task_name = "module.function".rsplit(".", 1);
module = importlib.import_module(path);
real_func = getattr(module, task_name);
real_func();
可以对实际的原始字符串进行模糊处理,或从数据库,文件或...中提取
还有importlib的替代方案,但这是你可能在@ horia的好答案中看到的exec类型的东西。