我想要一个引用特殊变量的
.ini
条目
例如
[magic_module]
magic_directory: ${env:PWD}/magic
目前我有非便携式
[magic_module]
magic_directory: C:/Users/user1/projects/project1/magic
我想要一个更便携的
.ini
路径条目,而不是硬编码到我的计算机上。 Python ConfigParser
本身会执行这样的替换吗?
这与SO问题ConfigParser和带有环境变量的字符串插值略有不同,因为我想知道任何可能的默认插值变量,而不仅仅是环境变量。
这是为了将信息传递到使用
mypy
的不同模块 (ConfigParser
)。
具体来说,这是为了提高 Python 包的可移植性。我试图在使用 pipelinev 创建的 virtualenv python 环境时在 mypy_path
mypy.ini
。用户安装模块路径将会改变,所以我想为mypy
进行可移植的设置。
使用Python 3.7。
通过将参数值
interpolation
设置为类 ExtendedInterpolation
的实例,您可以实现您的目标。请参阅下面的示例:
在以下示例中,我通过插值引用 Windows 开箱即用环境变量
TEMP
。
[magic_module]
magic_directory: ${WINDIR}/magic
[another_section]
another_directory=${magic_module:magic_directory}\folder1\folder2
import configparser
import os
def display_setting(config: configparser.ConfigParser,section: str, key: str):
value=config.get(section, key)
print(f"Value of {section}:{key}={value}")
print("Begin....")
config = configparser.ConfigParser(os.environ, interpolation=configparser.ExtendedInterpolation())
sample_ini_file=os.path.join(os.path.dirname(__file__),"sample.ini")
print(f"Going to load the INI file {sample_ini_file}")
config.read(sample_ini_file)
display_setting(config=config, section="magic_module", key="magic_directory")
display_setting(config=config, section="another_section", key="another_directory")
Begin....
Going to load the INI file C:\work\sample.ini
Value of magic_module:magic_directory=C:\WINDOWS/magic
Value of another_section:another_directory=C:\WINDOWS/magic\folder1\folder2