Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用gin config和importlib配置参数_Python_Python Importlib - Fatal编程技术网

Python 使用gin config和importlib配置参数

Python 使用gin config和importlib配置参数,python,python-importlib,Python,Python Importlib,我使用gin-config来配置不同类的超参数。对于以经典方式导入的模块来说,这是非常好的。但是,如何配置在使用importlib导入的类中使用的参数 在main.py中运行 import gin import importlib gin.parse_config_file('config.gin') module = importlib.import_module('src.external.SomeModule') _class = getattr(module, 'SomeClass')

我使用gin-config来配置不同类的超参数。对于以经典方式导入的模块来说,这是非常好的。但是,如何配置在使用importlib导入的类中使用的参数

在main.py中运行

import gin
import importlib

gin.parse_config_file('config.gin')
module = importlib.import_module('src.external.SomeModule')
_class = getattr(module, 'SomeClass')

This is the externally defined module in src.external.SomeModule
@gin.configurable
SomeClass:
    def __init__(self, variable):
        self.variable = variable
这是'config.gin'文件

SomeClass.variable=0
但是,如果我们这样定义,我们会得到:

Traceback (most recent call last):
  File "main_test.py", line 291, in <module>
    gin.parse_config_file(args.config_path)
  File "/site-packages/gin/config.py", line 1599, in parse_config_file
    parse_config(f, skip_unknown=skip_unknown)
  File "/site-packages/gin/config.py", line 1517, in parse_config
    bind_parameter((scope, selector, arg_name), value)
  File "/contextlib.py", line 130, in __exit__
    self.gen.throw(type, value, traceback)
  File "/site-packages/gin/utils.py", line 68, in try_with_location
    augment_exception_message_and_reraise(exception, _format_location(location))
  File "/site-packages/gin/utils.py", line 49, in augment_exception_message_and_reraise
    six.raise_from(proxy.with_traceback(exception.__traceback__), None)
  File "<string>", line 3, in raise_from
  File "/site-packages/gin/utils.py", line 66, in try_with_location
    yield
  File "/site-packages/gin/config.py", line 1517, in parse_config
    bind_parameter((scope, selector, arg_name), value)
  File "/site-packages/gin/config.py", line 643, in bind_parameter
    pbk = ParsedBindingKey(binding_key)
  File "/site-packages/gin/config.py", line 508, in __new__
    raise ValueError("No configurable matching '{}'.".format(selector))
ValueError: No configurable matching 'src.data.SomeModule.SomeClass'.
  In file "config/cnn_test.gin", line 35
    src.external.SomeModule.SomeClass.variable=0.
回溯(最近一次呼叫最后一次):
文件“main_test.py”,第291行,在
gin.parse\u config\u文件(args.config\u路径)
文件“/site packages/gin/config.py”,第1599行,在parse_config_文件中
解析配置(f,跳过未知=跳过未知)
parse_config中的文件“/site packages/gin/config.py”,第1517行
绑定参数((范围、选择器、参数名称)、值)
文件“/contextlib.py”,第130行,退出__
self.gen.throw(类型、值、回溯)
文件“/site packages/gin/utils.py”,第68行,在try_和_位置
增加异常消息并重新发送(异常、格式、位置)
文件“/site packages/gin/utils.py”,第49行,在增强异常消息中
六.从(代理.带回溯(例外.\uuu回溯),无)引发回溯
文件“”,第3行,从
文件“/site packages/gin/utils.py”,第66行,在try_和_位置
产量
parse_config中的文件“/site packages/gin/config.py”,第1517行
绑定参数((范围、选择器、参数名称)、值)
文件“/site packages/gin/config.py”,第643行,在bind_参数中
pbk=ParsedBindingKey(binding_key)
文件“/site packages/gin/config.py”,第508行,新__
raise VALUERROR(“没有可配置的匹配“{}.”。格式(选择器))
ValueError:没有可配置的匹配“src.data.SomeModule.SomeClass”。
在文件“config/cnn_test.gin”的第35行
src.external.SomeModule.SomeClass.variable=0。

我认为导入后只需将
gin.parse\u config\u文件('config.gin')
移动到。根据杜松子酒

最后,在定义或导入所有可配置类或函数后,解析配置文件以绑定配置

试试这个:

module = importlib.import_module('src.external.SomeModule')
_class = getattr(module, 'SomeClass')
gin.parse_config_file('config.gin')