pathlib 绝对路径与配置解析器行为不当

pathlib absolute path misbehaving with config parser

我有一个以下 python3 脚本,它使用 config 函数从脚本所在目录中的 txt 文件加载数据。

我已经实现了 configparser 模块来提取数据,并实现了 pathlib 模块来设置该文件的绝对路径

from pathlib import Path

try:
    import ConfigParser as configparser
except:
    import configparser

def config():
    parser = configparser.ConfigParser()
    config_file = Path('config.txt').resolve()
    parser.read(config_file)
    return parser

然后我将它作为参数传递给下一个方法,然后从 配置文件:

def search_for_country(config):
    country_name = config.get("var", "country_name")

config.txt 文件的结构如下:

[var]
country_name = Brazil

问题是:如果我通过终端从同一目录 运行 脚本,一切正常,但最终它打算 运行 作为 cron 作业,如果我尝试从上面的一个目录执行它,它 returns 出现以下错误:

File "test/script.py", line 28, in search_for_country
    country_name = config.get("var", "country_name")
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/configparser.py", line 781, in get
    d = self._unify_values(section, vars)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/configparser.py", line 1149, in _unify_values
    raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'var'

这似乎是说找不到 txt 文件。

到目前为止,我尝试了不同的选项,例如使用 parser.read_file() 而不是 parser.read(),也试过这个:

但是 none 似乎有效。也许有人能想到这个问题的原因?

所以你的问题:

import pathlib

path_own_dir = pathlib.Path(__file__).parent.resolve()
path_conf_file = path_own_dir / 'config.txt'
assert path_conf_file.is_file()

但是为什么首先要将这样的配置存储为文本? “配置就是代码”- 那么为什么要用文本配置文件来限制自己?

我通常的做法是:

# conf.py
class Conf(object):
    def __init__(self):
        country_name: str = 'Brazil'

conf=Conf()
# main.py

from .conf import conf

print(conf.county_name)

# override settings in the object
conf.county_name = 'Argentina'

print(conf.county_name)

它有很多优点,比如拥有正确的数据类型, 具有 IDE 提示、避免解析器、动态更改设置等...