__init__.py читает файл внутри модуля, который завершается ошибкой, когда верхний модуль заархивирован - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть код, который читает файл конфигурации в файле __init__.py внутри определенного модуля.Допустим, у меня есть такая структура:

dir/
    setup.py
    src/
        __init__.py
        properties/
           config.yaml
        module/
           __init__.py ---> this file reads src/properties/config.yaml

Код для чтения выглядит примерно так:

with open(os.path.join(_ROOT, os.path.normpath('src/properties/config.yaml'))) as f:
    config = yaml.load(f)

Где _ROOT определяется в верхней части src/__init__.py следующим образом:

ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))

В основном, _ROOT=dir.

Это работает как заклинание на каждой платформе, за исключением случаев, когда src используется в качестве zip-пакета, для которого чтение возвращает FileNotFoundError: ... No such file or directory: ... package.zip\\src\\properties\\config.yaml.

Есть ли способ решения этой проблемы, нужно ли разбираться с ситуацией, когда пакет упакован в архив, следует ли избегать загрузки файла внутри кода пакета ...?

Я пыталсяобширный поиск в Google для этого, но я ничего не нашел.

Заранее спасибо.

1 Ответ

0 голосов
/ 12 сентября 2018

Я смог решить это с pkgutil.get_data!

import src
a = pkgutil.get_data('src', 'properties/config.yaml')
config = yaml.load(a)

Et voilá!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...