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

时间:2019-07-18 14:20:53

标签: python setup.py

我的目录结构如下:

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

我需要从font.ttf访问main.py。我可以通过从main.py运行videocloud/videocloud/并通过引用访问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

1 个答案:

答案 0 :(得分:1)

正如Grzegorz Bokota所述。 在软件包中使用MANIFEST.IN,您可以包含数据文件/配置文件,这些文件/配置文件将在安装软件包后安装到站点软件包中。

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

我相信您随后应该能够导入它/至少通过site-packages目录结构访问它以获取对其的访问权限(尽管第二次打开感觉很hacky)