如题, 标题里所谓“安全地”指的是在载入阶段不运行任何用户级代码,只做单纯的载入。
比如我们写包的时候经常会把除了 class 和 def 外的其他部分,用if __name__ == '__main__':
包裹起来,做的就是这种工作。让我们只是单纯地执行 import,而后续的工作可以在 import 后根据已经导入的实际情况分析判断之后再做决定。。
这个问题可能面对的情况有两种,其一是我设计框架开放了一个插槽,允许用户插入自定义脚本。那么我希望在导入阶段并不会直接开始“因为某些用户书写脚本的疏漏”,而直接开始运行某几句代码,以避免发生任何不可控的问题。
另一个情况比如说我们从网上下载开源库,虽然 pypi 不像 npm 那样发展到遍地病毒的程度,但是毕竟也允许上传自定义二进制文件。。。所以出于安全考量我们希望只是单纯地引入 class 和 function,不执行任何一句代码。
====================
总之,有比较优雅的方式实现吗?
==================== 我能想到的比较丑陋的办法就是自己实现一个简单的解释器,读入库文本进行预 parsing,但是怎么想都感觉很蛋疼。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.