gpt4 book ai didi

python - 在不删除 pyc 文件的情况下无法在 Python 中重新加载正确的模块

转载 作者:行者123 更新时间:2023-11-28 22:01:53 25 4
gpt4 key购买 nike

我正在尝试将代码作为模块加载,然后在 Python 中以编程方式重新加载相同的模块但不同的代码:

import imp

a = """
def test():
print "Hello from a"
"""

b = """
def test():
print "Hello from b"
"""


for code in [a, b]:
with open('user.py', 'wb') as f:
f.write(code)
mod = imp.load_source('user', 'user.py')
getattr(mod, "test")()

预期输出:

Hello from a
Hello from b

实际输出:

Hello from a
Hello from a

显然我对它的工作原理的理解是不正确的,但我似乎无法弄清楚我的错误。

唯一能让它工作的方法是在我将代码写入文件 f 之前删除生成的 .pyc 文件。有没有更好的办法?

最佳答案

如果您要从字符串或文件中动态加载代码,最好使用 exec/execfile 而不是 importimport 适用于静态或很少更改的文件。

如果您仍想使用 imp.load_source,请注意以下警告:

Note that if a properly matching byte-compiled file (with suffix .pyc or .pyo) exists, it will be used instead of parsing the given source file.

“正确匹配”意味着编译文件的版本与解释器匹配并且时间戳匹配。正如 Tim 指出的那样,如果您快速连续写入文件两次,时间戳可能不会更改,并且 .pyc 仍将被视为有效。

关于python - 在不删除 pyc 文件的情况下无法在 Python 中重新加载正确的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12489589/

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