我正在编写一组Python模块,这些模块本质上是包含在动态库中的其他代码的实用程序模块。为了使包装和使用更容易,我想要做的是将它们捆绑在库中(在Windows上作为字符串资源,在Linux上我还不确定 - 可能导出一个返回字符串的函数) 。现在我想知道是否有办法将Python模块导入为其源代码的字符串文字。基本上相当于
mymod = "def func():\n return 1"
import(mymod)
导入模块本身的任何导入也应该有效。理想情况下,我想到某种方式提供一个回调函数,该函数传递一个模块的名称并返回一个包含其内容的字符串,这样我就可以递归地加载我的模块;但作为备份,我也可以忍受在导入主模块的情况下,我会在python中的 init 中做同样的事情(即手动动态加载任何依赖项 - 当然我不喜欢手动做事,因此为什么这是一个后备:))
哦,我想在Python 2.7和3中使用它,如果这有所不同......
答案 0 :(得分:-1)
如果您正在寻找一种方法exec
来自字符串的代码(不推荐使用,您可能最好通过setup.py的整个过程来使您的库可以安装)可以使用exec
语句,如下所示
exec(mymod)
这将解析字符串,就像普通的Python源代码一样,执行它,留下它的副作用(比如定义函数和变量)。这适用于Python 2.7和3.x.有关详细信息,请参阅文档here和here。
或者,仅在Python 2.7中,execfile
与exec
执行相同的操作,但对于文本文件
execfile("path/to/my/mod")
documentation解释了它做了什么,不做什么。