定义软链接时,从Python引用YAML配置文件

时间:2018-12-05 04:52:35

标签: python-3.x yaml config

我有以下代码;

#!/usr/bin/env python3

import yaml

with open('config.yml', 'r') as config_file:
    config = yaml.load(config_file)

该文件名为__init__.py,位于目录~/bin/myprogram/myprogram/中,并且在同一目录中,我有一个名为config.yml的文件

我的符号链接如下;

user$ ls -la /usr/local/bin/

lrwxr-xr-x    1 user  admin        55 27 Nov 13:25 myprogram -> /Users/user/bin/myprogram/myprogram/__init__.py

每次运行程序时,都会收到错误FileNotFoundError: [Errno 2] No such file or directory: 'config.yml'。我相信这是因为config.yml不在/usr/local/bin/中。解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

在文件中执行代码时,可以使用__file__访问__init__.py文件的位置。它返回完整路径,但是必须小心,因为它可能是.pyc(或.pyo)版本。由于您使用的是Python3,因此我将使用pathlib模块:

import yaml
import pathlib

my_path = Path(__file__).resolve()  # resolve to get rid of any symlinks
config_path = my_path.parent / 'config.yaml'

with config_path.open() as config_file:
    config = yaml.safe_load(config_file)

请注意:

  • 如果必须使用PyYAML,请使用safe_load(),即使PyYAML自己的文档也指出.load()可能是不安全的。几乎从来没有必要使用它。并且在极少数情况下safe_load()无法加载您的配置,例如如果它具有!!python/...标签,则应向SafeLoader显式添加注册实际需要的类。

  • September 2006recommended extension for YAML files.yaml