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

时间:2018-09-12 13:38:49

标签: python io python-3.6 configuration-files python-packaging

我有一些代码可以读取某个模块内__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的zip包之外),这在每个平台上都像一个魅力。

有没有解决此问题的方法,压缩包时是否需要处理这种情况,我应该避免将文件加载到打包代码中吗...?

我对此进行了广泛的Google搜索,但未找到任何结果。

谢谢。

1 个答案:

答案 0 :(得分:0)

我能够用pkgutil.get_data解决它!

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

等等!