如何从已安装的包中访问资产

How to access assets from installed package

我的目录结构如下所示:

videocloud
  |
  |---videocloud
  |    |
  |    |---main.py
  |    |---font.ttf
  |
  |---setup.py

我需要从 main.py 访问 font.ttf。我可以通过 videocloud/videocloud/ 运行 main.py 并通过引用它来访问 font.ttf 来做到这一点。但是,工作目录不会始终保持不变。在执行 python setup.py install 之后,软件包将安装到 site-packages 并且 font.ttf 将无法访问。

我尝试将其添加到我的设置脚本中:

import setuptools

setuptools.setup(
    ...
    data_files=[("videocloud", ["NotoSans.ttf"])]

但是安装时报错:

error: can't copy 'NotoSans.ttf': doesn't exist or not a regular file

这似乎可行:

data_files=[("videocloud", ["videocloud/NotoSans.ttf"])]

但即便如此,当我尝试通过 pkg_resources.resource_filename(__name__, "NotoSans.ttf") 访问它时,它给了我 KeyError: 'videocloud\NotoSans.ttf

正如 Grzegorz Bokota 提到的那样。 在您的包中使用 MANIFEST.IN,您可以包含数据 files/config 文件,这些文件将在安装包后安装到 site-packages 中。

查看 manifest.in 上的文档 https://docs.python.org/2/distutils/sourcedist.html

我相信你应该能够导入 it/at 至少通过 site-packages 目录结构访问它以访问它(尽管第二次打开感觉很糟糕)