__init__.py读取模块内部的文件,该文件在压缩顶部模块时失败

问题描述 投票:0回答:1

我有代码读取某个模块内的__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用作拉链包时,读取返回FileNotFoundError: ... No such file or directory: ... package.zip\\src\\properties\\config.yaml

有没有办法解决这个问题,我是否需要处理压缩包的情况,我是否应该避免在包代码中加载文件...?

我尝试了广泛的谷歌搜索,但我一无所获。

先感谢您。

python io python-3.6 configuration-files python-packaging
1个回答
0
投票

我能用pkgutil.get_data来解决它!

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

我们来了!

© www.soinside.com 2019 - 2024. All rights reserved.