从 egg 中访问数据文件

Accessing data files from within an egg

我有一个带有默认 json 文件的包,以防用户没有提供 data = pkgutil.get_data(__name__, "deprecated.json")

当 运行 单机运行时这很好

但是如果我运行python setup.py install创建my.egg 运行 easy_install my.egg 最后启动可执行文件我收到一条错误消息 [Errno 2 nosuch file or director: `d:\work\pythonvenv\lib\site-packages\my.egg\PackageName\depercate.json

    return loader.get_data(resource_name)
  File "<frozen importlib._bootstrap_external>", line 972, in get_data

我认为使用 pkgutil.get_data 的目的是为了防止此类问题?

修改您的 setup.py 文件以包含 package_data,如 https://docs.python.org/3.8/distutils/setupscript.html#installing-package-data

setup(
    ...,
    package_data={'pkgName': ["path/to/deprecated.json"]},
)

实现相同行为的另一种方法是创建一个包含内容 include path/to/deprecated.jsonMANIFEST.in 文件,然后在您的 setup 函数中包含参数 include_package_data=True。这在 https://python-packaging.readthedocs.io/en/latest/non-code-files.html.

中有详细说明