python从外部加载包全局配置

时间:2015-04-17 19:46:34

标签: python

我有一个名为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

1 个答案:

答案 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对象,之后又进行了更改,但是当您要求配置时,您仍然可以找到正确的对象。

通常,我尝试不使用全局变量,但这意味着将配置对象传递到您需要的地方。