gpt4 book ai didi

python-3.x - 如何从字符串导入 Python 3 中的模块?

转载 作者:行者123 更新时间:2023-12-04 03:21:12 29 4
gpt4 key购买 nike

A solution因为此问题适用于 Python 2,但它使用了在 Python 3 中已弃用的 imp 模块。

imp 已替换为 importlib这适用于基于文件的导入。具体来说,importlib.import_module 需要一个文件名 - 而不是字符串或文件处理程序。

我通过将 URL 的内容转储到文件并导入它来解决此问题

def initlog():
modulename = '_mylogging'
try:
import _mylogging
except ImportError:
r = requests.get('http://(...)/mylogging.py')
with open(modulename+'.py', "w") as f:
f.write(r.text)
finally:
import _mylogging

return _mylogging.MYLogging().getlogger()

但我想避免使用中间文件。

将安全性、网络性能和可用性问题放在一边 - 有没有办法将字符串提供给 importlib(或者从文件处理程序,在这种情况下我将使用 io.StringIO )

最佳答案

你可以适应exactly the same answer到 3.x,使用 the replacement for imp.new_module :

from types import ModuleType

foo = ModuleType('foo')

the replacement for the exec statement :

foo_code = """
class Foo:
pass
"""

exec(foo_code, globals(), foo.__dict__)

之后一切正常:

>>> dir(foo)
['Foo', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> foo.Foo()
<__main__.Foo object at 0x110546ba8>

关于python-3.x - 如何从字符串导入 Python 3 中的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38304719/

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