创建依赖于属性文件的子模块

Creating a submodule that relies on a properties file

我有以下结构

main.py
module/
    properties.yaml
    file.py

file.py相关代码:

def read_properties():
    with open('properties.yaml') as file:
        properties = yaml.load(file)

main.py相关代码:

from module import file
file.read_properties()

在 main.py 中调用 read_properties() 时,出现以下错误:FileNotFoundError: [Errno 2] No such file or directory: 'properties.yaml'

即使在导入时也允许我的模块访问属性文件的推荐方法是什么?

提供 properties.yaml 的绝对路径:

with open('/Users/You/Some/Path/properties.yaml') as file:

正如JacobIRR在他的回答中所说,最好使用文件的绝对路径。我使用 os 模块来构造基于当前工作目录的绝对路径。所以对于你的代码,它会是这样的:

import os
working_directory = os.path.dirname(__file__)
properties_file = os.path.join(working_directory, 'module', 'properties.yaml')

基于@JacobIRR 和@BigGerman 的回答

我最终使用了 pathlib 而不是 os,但逻辑是一样的。 这是感兴趣的 os 的路径库语法:

在file.py中:

from pathlib import Path
properties_file = Path(__file__).resolve().parent/"properties.yaml"
with open(properties_file) as file:
    properties = yaml.load(file)