我将配置保存在 python 文件中并重新加载。由于它从当前工作目录导入一些内容,我想要
load its variables by path
。
使用
import_module
中的reload
和importlib
似乎不支持指定文件路径。因此我使用 SourceFileLoader
和 load_module
。
read_file.py
import os
from importlib.machinery import SourceFileLoader
import time
class File:
file_path = "D:\\file.py"
file_modified = os.path.getmtime(file_path)
file = SourceFileLoader("", file_path).load_module()
def read(f) -> None:
try:
last_modified = os.path.getmtime(f.file_path)
if f.file_modified == last_modified:
print("Not updated")
return
print("Updated")
f.file_modified = last_modified
file = SourceFileLoader("", f.file_path).load_module()
print("X" in f.file.__dict__) # unexpectedly returns always True
except Exception as e:
print(e)
f = File()
print("X" in f.file.__dict__)
while True:
read(f)
time.sleep(1)
文件.py
class X:
pass
在执行过程中,我
rename X to Y
。但它仍然可以访问 X。
True
Not updated
Updated
True
Not updated
Updated
True
Not updated
Updated
True
你在第 21 行犯了一个小错误。
file = SourceFileLoader("", f.file_path).load_module()
应更新为 f.file = SourceFileLoader("", f.file_path).load_module()
。