Python 已修改模块的内置重新加载()未按预期工作

Python 已修改模块的内置重新加载()未按预期工作,python,python-2.7,Python,Python 2.7,我有一些函数,可以将Python代码写入文件。 在我的测试中,我创建、导入、修改并重新加载一个模块,但在python2中重新加载似乎不起作用 test.py functions.py 预期行为 实际行为 如果我使用python3并将内置的reload()替换为importlib.reload()一切正常 有人知道我在这里做错了什么吗(除了用Python代码编写配置并导入它之外)?正如我在评论中提到的,你真的不应该这么做——一种数据格式,如JSON、YAML、TOML,或者如果你需要更多的数据格式

我有一些函数,可以将Python代码写入文件。 在我的测试中,我创建、导入、修改并重新加载一个模块,但在python2中重新加载似乎不起作用

test.py
functions.py
预期行为 实际行为 如果我使用python3并将内置的
reload()
替换为
importlib.reload()
一切正常


有人知道我在这里做错了什么吗(除了用Python代码编写配置并导入它之外)?

正如我在评论中提到的,你真的不应该这么做——一种数据格式,如JSON、YAML、TOML,或者如果你需要更多的数据格式支持,并且没有人可读性,Python pickle更好

另外,您不应该运行Python2–它的EOL很快就会出现

无论采用哪种方式,通过运行python2-v来跟踪导入,我都能弄清楚发生了什么:

# ... snip ...
Python 2.7.17 (default, Oct 24 2019, 12:57:47)
# /Users/akx/Desktop/config.pyc has bad mtime
import config # from /Users/akx/Desktop/config.py
# wrote /Users/akx/Desktop/config.pyc
Before:
['item1', 'item2']
# /Users/akx/Desktop/config.pyc matches /Users/akx/Desktop/config.py
import config # precompiled from /Users/akx/Desktop/config.pyc
After:
['item1', 'item2']
# ... snip ...
它使用的是旧的预编译
config.pyc
,即使我们修改了
config.py

os.utime('config.py',None)
添加到
touch
文件中,告诉Python它实际上已更新,在这里没有任何效果-可能是因为文件系统的时间分辨率不够!这里唯一的解决方法是查看是否有预编译文件,并在编辑
.py
文件后对其进行核处理:

以open('config.py','a')作为f的
:
f、 书写(文本)
如果os.path.isfile('config.pyc'):
取消链接('config.pyc')
。。。你瞧:

Python 2.7.17 (default, Oct 24 2019, 12:57:47)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
# /Users/akx/Desktop/config.pyc has bad mtime
import config # from /Users/akx/Desktop/config.py
# wrote /Users/akx/Desktop/config.pyc
Before:
['item1', 'item2']
LIST += [
    'item3',
]

import config # from /Users/akx/Desktop/config.py
# wrote /Users/akx/Desktop/config.pyc
After:
['item1', 'item2', 'item3']

试试execfile Primitives是的,您真的不应该依赖于为配置生成Python代码,也不应该依赖于
reload()
。谢谢。这有帮助。解释器无法识别源文件比缓存文件新。
$ python2 test.py
Before:
['item1', 'item2']
After:
['item1', 'item2', 'item3']
$ python2 test.py
Before:
['item1', 'item2']
After:
['item1', 'item2']
# ... snip ...
Python 2.7.17 (default, Oct 24 2019, 12:57:47)
# /Users/akx/Desktop/config.pyc has bad mtime
import config # from /Users/akx/Desktop/config.py
# wrote /Users/akx/Desktop/config.pyc
Before:
['item1', 'item2']
# /Users/akx/Desktop/config.pyc matches /Users/akx/Desktop/config.py
import config # precompiled from /Users/akx/Desktop/config.pyc
After:
['item1', 'item2']
# ... snip ...
Python 2.7.17 (default, Oct 24 2019, 12:57:47)
[GCC 4.2.1 Compatible Apple LLVM 11.0.0 (clang-1100.0.33.8)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
# /Users/akx/Desktop/config.pyc has bad mtime
import config # from /Users/akx/Desktop/config.py
# wrote /Users/akx/Desktop/config.pyc
Before:
['item1', 'item2']
LIST += [
    'item3',
]

import config # from /Users/akx/Desktop/config.py
# wrote /Users/akx/Desktop/config.pyc
After:
['item1', 'item2', 'item3']