所以我一直在寻找神圣的东西,看起来很棒。不幸的是,我没有找到任何多个文件用例 - 例如我正在尝试实现。
所以我有这个名为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)。 我究竟做错了什么?我该如何解决这个问题?
欣赏它!
答案 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