【问题标题】:python project structure with CLI and config script带有 CLI 和配置脚本的 python 项目结构
【发布时间】:2021-05-14 18:34:20
【问题描述】:

我有一个应用程序,目前它已设置为脚本之一 config.py 从 config.yaml 配置文件中读取数据并设置了一些默认值。到目前为止,这很好用,因为所有内容都在一个地方定义。

我现在想从 CLI 传递应用程序参数。我将如何做到这一点,以便我也可以替换 config.py 中的参数?我可能会以次优方式构建应用程序,因此感谢您提供任何反馈。

我在这里看到了一篇关于此的大量帖子:Most Pythonic way to provide global configuration variables in config.py?

我目前正在遵循提到的最简单的“常规”方法,即:

config.py

MYSQL_PORT = 3306
MYSQL_DATABASE = 'mydb'
MYSQL_DATABASE_TABLES = ['tb_users', 'tb_groups']

因此,全局变量通过以下方式之一导入:

另一个脚本.py

from config import MYSQL_PORT

我能否将配置中的所有内容封装在一个对象或类中,而无需更改从 config.py 导入的所有代码。

【问题讨论】:

    标签: python command-line-interface argparse python-module


    【解决方案1】:

    定义一个配置对象或类。让您的应用程序从配置对象中读取。然后,您可以在外部文件中设置默认值,然后对其进行解析,或通过 CLI 传递。

    【讨论】:

    • 我稍微扩展了我的问题。我的代码版本 1 是按照我的解释编写的。现在我想扩展以使用 CLI,而不需要大量更改代码库(如果可能的话)。谢谢!
    • 我认为你应该只在一个地方加载配置,比如application.py。之后, another_script.py 不会从 config 中读取,而是从 app 对象中读取。一旦你有了它,你就可以初始化你的应用程序并从 CLI 参数、外部文件或 config.py 中的硬编码值更新配置
    【解决方案2】:

    在做了一些研究并与同事交谈后,我发现了这个包,它很好地解决了这个问题:

    https://pypi.org/project/munch/

    来自网站:

    Munch 是一个支持属性样式访问的字典,类似于 JavaScript:

    >>> b = Munch()
    >>> b.hello = 'world'
    >>> b.hello
    'world'
    >>> b['hello'] += "!"
    >>> b.hello
    'world!'
    >>> b.foo = Munch(lol=True)
    >>> b.foo.lol
    True
    >>> b.foo is b['foo']
    True
    

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 2015-04-21
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多