gpt4 book ai didi

python - 有没有办法在字符串中导入 Python 模块?

转载 作者:行者123 更新时间:2023-12-03 22:40:24 25 4
gpt4 key购买 nike

假设,我在代码中定义了一个字符串,如下所示:

module_string = """
def add(x, y):
return x + y

def multiply(x, y):
return x * y
"""
有没有办法有效地做到以下几点:
from module_string import add, multiply

According to the Python documentation ,脚本将仅搜索模块为 .py包含输入脚本的目录中的文件(或未指定文件时的当前目录)。”然后在 PYTHONPATH 或安装相关的默认值中查找模块。
一个明显的方法是将字符串写入后缀为 .py 的文件中。然后导入它。虽然这可行,但它确实创建了一个实际文件和一个 __pycache__工作目录中的目录,这可能是不可取的。
虽然可以使用 exec()简单地将字符串作为代码执行,如果模块字符串具有 __all__,则其行为与预期不符。已定义或是否有 if __name__ == '__main__':作为模块导入时不打算执行的模块的一部分。
有没有办法让一个字符串在 Python 中表现得像一个可导入的模块,而不必在工作目录中生成一堆文件和目录?或者模块必须作为文件存在是绝对必要的吗?有什么方法可以通过 StringIO 伪造这个吗?对象或类似的东西?

上下文:我希望能够从 Github Gist 中的文件动态导入模块,并在 gist 进行修订时动态更新导入的类/函数。我通过使用 GitHub 的 REST API 通过 requests 将 Gist 作为字符串读取来做到这一点。模块,但我需要找到某种方法来将此字符串作为模块导入代码本身。
如果我的问题更多是 an XY problem相反,我很想听听关于如何实现我的预期目标的其他建议。

PS:假设我已经考虑过与此问题相关的所有各种网络安全问题(因为我知道 SO 上的一些人会有专注于这方面的冲动)。

最佳答案

执行您下载的代码可能不是一个好主意,但如果您真的想这样做

>>> module_string = """
... def add(x, y):
... return x + y
...
... def multiply(x, y):
... return x * y
... """
>>> exec(module_string)
>>> add(1,2)
3

关于python - 有没有办法在字符串中导入 Python 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64365367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com