setuptools 具有三种不同的方式来指定应与项目一起打包的数据文件,Manifest.in、data_files 和 package_data。对于源代码树下的配置文件,package_data 通常是最容易使用的。
给定一个非常小的示例项目,如下所示:
.
├───setup.py
└───tmp
├───__init__.py
└───keys.json
您需要一个至少具有此配置的setup.py 文件来打包tmp 下的所有代码和.json 文件:
from setuptools import setup
setup(
name="tmp",
version="0.1.0",
packages=["tmp"],
package_data={"tmp": ["*.json"]},
)
keys.json 文件仅包含 {"key": "foo"}。
从你的包中解析打包的配置文件最安全的方法是使用importlib.resources 来访问它,特别是它的path 函数(如果你被困在python 3.7 或更早版本上,importlib_resources 是一个等效的 pip -可安装的反向端口):
tmp/__init__.py
from importlib import resources
import json
def print_keys():
with resources.path("tmp", "keys.json") as foo_path:
print(json.load(foo_path.open()))
一旦我用pip install -e . 安装了这个包,我就可以运行了:
>>> import tmp
>>> tmp.print_keys()
{'key': 'foo'}
如果您打算暂时使用 python 打包,请考虑使用比 setuptools 更现代的构建后端,例如 poetry 或 flit。它们使体验很多更容易忍受。