我有以下代码;
#!/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/
中。解决此问题的最佳方法是什么?
答案 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
显式添加注册实际需要的类。