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

Executable access to yaml configuration file using setuptools

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

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

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

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

root
├── spam
│   ├── __init__.py
│   ├── eggs.py
│   └── <b>config.yml</b>
└── setup.py

并使用 importlib.resources (or importlib_resources backport for Python < 3.7) 以代码访问文件,例如

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:

标记要包含在源dist/wheel中的non-Python文件
from setuptools import setup


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