使用 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>
)
使用 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
:
from setuptools import setup
setup(
...
packages=['spam'],
<b>package_data={'spam': ['config.yml']}</b>
)