神圣的,python - ex.config在一个文件和ex

时间:2017-12-13 10:22:41

标签: python python-sacred

所以我一直在寻找神圣的东西,看起来很棒。不幸的是,我没有找到任何多个文件用例 - 例如我正在尝试实现。

所以我有这个名为configuration.py的文件,它意图包含不同的变量,这些变量将(使用神圣的)插入其余代码(放置在不同的文件中):

from sacred import Experiment
ex = Experiment('Analysis')

@ex.config
def configure_analysis_default():
    """Initializes default  """
    generic_name = "C:\\basic_config.cfg" # configuration filename
    message = "This is my generic name: %s!" % generic_name
    print(message)

@ex.automain #automain function needs to be at the end of the file. Otherwise everything below it is not defined yet
#  when the experiment is run.
def my_main(message):
    print(message)

这本身很有效。神圣正在按预期工作。但是,当我尝试引入名为Analysis.py的第二个文件时:

import configuration
from sacred import Experiment
ex = Experiment('Analysis')

@ex.capture
def what_is_love(generic_name):
    message = " I don't know"
    print(message)
    print(generic_name)

@ex.automain
def my_main1():
    what_is_love()

运行Analysis.py产生:

错误:

  

TypeError:what_is_love缺少[' generic_name']

的值

我预计'导入配置'包含configuration.py文件的语句,从而导入其中配置的所有内容,包括configure_analysis_default()及其decorator @ex.config,然后将其注入what_is_love(generic_name)。 我究竟做错了什么?我该如何解决这个问题?

欣赏它!

2 个答案:

答案 0 :(得分:2)

看起来我们应该在这种情况下使用原料。

http://sacred.readthedocs.io/en/latest/ingredients.html

但我还没有想出来。

我在我的设置中遇到了循环导入问题,所以我使用的是一个单独的文件exp.py,只说明了

from sacred import Experiment
ex = Experiment("default")

我在包中的每个文件中

from exp import ex

并且装饰器和配置变量传递似乎工作。我可以使用--name:

在命令行上更改实验的名称

$> python main.py --name newname

答案 1 :(得分:1)

所以,非常愚蠢,但我会在这里张贴,以支持任何有类似问题的人...

我的问题是我创建了一个不同的实验实例。我只需要从配置文件中导入我的实验。

取代这个:

import configuration
from sacred import Experiment
ex = Experiment('Analysis')

用这个:

import configuration
ex = configuration.ex