繁体   English   中英

模块重新加载无法正常工作

[英]Module reload doesn't work as expected

我在理解为什么reload()在以下代码中无法正常工作时遇到问题:

# Create initial file content
f = open('some_file.py', 'w')
f.write('message = "First"\n')
f.close()

import some_file
print(some_file.message)        # First

# Modify file content
f = open('some_file.py', 'w')
f.write('message = "Second"\n')
f.close()

import some_file
print(some_file.message)        # First (it's fine)
reload(some_file)
print(some_file.message)        # First (not Second, as expected)

如果我使用外部编辑器手动更改文件some_file.py (在程序运行时),那么一切都会按预期进行。 所以我想这可能与同步有关。

环境:Linux,Python 2.7。

问题在于您的代码会立即更改文件,因此该文件显示为未经修改。 看到这个答案

我在两次文件写入之间尝试了相同的1秒钟睡眠时间来测试您的代码,但工作正常

import time

# Create initial file content
f = open('some_file.py', 'w')
f.write('message = "First"\n')
f.close()

import some_file
print(some_file.message)        # First

time.sleep(1)                   # Wait here

# Modify file content
f = open('some_file.py', 'w')
f.write('message = "Second"\n')
f.close()

import some_file
print(some_file.message)        # First 
reload(some_file)
print(some_file.message)        # Second, as expected

解决方法

  1. 删除为模块生成的.pyc文件( some_file.pyc或类似的文件)。 这将迫使python重新编译它。
  2. 只需随即更改模块并写入文件即可。 看到这个 就像是

     some_file.message = "Second\\n" f = open('some_file.py', 'w') f.write('message = "Second"\\n') f.close() 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM