将Python模块导入为字符串

时间:2018-04-23 13:55:33

标签: python

我正在编写一组Python模块,这些模块本质上是包含在动态库中的其他代码的实用程序模块。为了使包装和使用更容易,我想要做的是将它们捆绑在库中(在Windows上作为字符串资源,在Linux上我还不确定 - 可能导出一个返回字符串的函数) 。现在我想知道是否有办法将Python模块导入为其源代码的字符串文字。基本上相当于

mymod = "def func():\n    return 1"
import(mymod)

导入模块本身的任何导入也应该有效。理想情况下,我想到某种方式提供一个回调函数,该函数传递一个模块的名称并返回一个包含其内容的字符串,这样我就可以递归地加载我的模块;但作为备份,我也可以忍受在导入主模块的情况下,我会在python中的 init 中做同样的事情(即手动动态加载任何依赖项 - 当然我不喜欢手动做事,因此为什么这是一个后备:))

哦,我想在Python 2.7和3中使用它,如果这有所不同......

1 个答案:

答案 0 :(得分:-1)

如果您正在寻找一种方法exec来自字符串的代码(不推荐使用,您可能最好通过setup.py的整个过程来使您的库可以安装)可以使用exec语句,如下所示

exec(mymod)

这将解析字符串,就像普通的Python源代码一样,执行它,留下它的副作用(比如定义函数和变量)。这适用于Python 2.7和3.x.有关详细信息,请参阅文档herehere

或者,仅在Python 2.7中,execfileexec执行相同的操作,但对于文本文件

execfile("path/to/my/mod")

documentation解释了它做了什么,不做什么。