Создание подмодуля, который опирается на файл свойств - PullRequest
0 голосов
/ 09 ноября 2018

У меня следующая структура

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'

Каков рекомендуемый способ предоставления моему модулю доступа к файлу свойств даже после импорта?

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Как сказал в своем ответе JacobIRR, лучше всего использовать абсолютный путь к файлу. Я использую модуль os для построения абсолютного пути на основе текущего рабочего каталога. Так что для вашего кода это будет что-то вроде:

import os
working_directory = os.path.dirname(__file__)
properties_file = os.path.join(working_directory, 'module', 'properties.yaml')
0 голосов
/ 09 ноября 2018

Основываясь на ответах @JacobIRR и @ BigGerman

В итоге я использовал pathlib вместо os, но логика та же.Вот синтаксис с pathlib для интересующихся:

в file.py:

from pathlib import Path
properties_file = Path(__file__).resolve().parent/"properties.yaml"
with open(properties_file) as file:
    properties = yaml.load(file)
0 голосов
/ 09 ноября 2018

Укажите абсолютный путь к properties.yaml:

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