使用setuptools对yaml配置文件的可执行访问

时间:2019-06-20 16:00:29

标签: python setuptools pyyaml

使用entry_points生成的可执行文件找不到Yaml配置文件的路径。

我正在使用setuptools分发一个小型应用程序(主要在我的办公室本地)。我在MANIFEST.in文件中有Yaml配置文件,因此在构建应用程序时,所有内容都将安装到站点程序包中。此方法有效,但是该可执行文件已安装在虚拟env bin文件夹中,并且不再知道Yaml配置文件。

指定Yaml文件位置的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

将yaml配置放在代码中的python包中:

root
├── spam
│   ├── __init__.py
│   ├── eggs.py
│   └── config.yml
└── setup.py

并使用importlib.resources(或对于Python <3.7的importlib_resources反向端口)以代码形式访问文件,例如

try:
    from importlib import resources as res
except ImportError:
    import importlib_resources as res

with res.open_binary('spam', 'config.yml') as fp:
    config = yaml.load(fp, Loader=yaml.Loader)
    ...

通过package_data将非Python文件标记为包含在源dist / wheel中:

from setuptools import setup


setup(
    ...
    packages=['spam'],
    package_data={'spam': ['config.yml']}
)