我有一个名为lib的包。我想要实现的是从main.py中的yaml文件加载一些配置,并将包配置设置为可以全局访问包配置的配置。 请注意,我不想从我的包中加载yaml文件,但是想在main.py中加载它并将其传入。 问题是fire.py仍然看到一个空字典。 请解释原因和解决方法。
.
└───lib
└───lib/__init__.py
└───lib/fire.py
└───config.yaml
└───main.py
main.py:
import yaml
import os
import lib.fire as fire
import lib
BASE_DIR = os.path.dirname(os.path.realpath(__file__))
file= open("%s/config.yaml" % BASE_DIR, 'r')
config = yaml.load(stream)
lib.set_config(config)
file.close()
fire.start()
初始化的.py:
config = {}
def set_config(data):
global config
config = data
fire.py
from . import config
def start():
print config
答案 0 :(得分:0)
导入lib.fire
时,它会从__init__.py
获取配置。那时它是{}
。
如果您要执行此操作,则需要在调用lib.fire
后导入set_config
。
import lib
lib.set_config(config)
import lib.fire as fire
fire.start()
为避免必须按正确的顺序进行导入,请fire.py
:
import lib
def start():
print lib.config
您导入了lib对象,之后又进行了更改,但是当您要求配置时,您仍然可以找到正确的对象。
通常,我尝试不使用全局变量,但这意味着将配置对象传递到您需要的地方。