使用entry_points生成的可执行文件找不到Yaml配置文件的路径。
我正在使用setuptools分发一个小型应用程序(主要在我的办公室本地)。我在MANIFEST.in文件中有Yaml配置文件,因此在构建应用程序时,所有内容都将安装到站点程序包中。此方法有效,但是该可执行文件已安装在虚拟env bin文件夹中,并且不再知道Yaml配置文件。
指定Yaml文件位置的最佳方法是什么?
答案 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']}
)