我的目录结构如下:
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
答案 0 :(得分:1)
正如Grzegorz Bokota所述。 在软件包中使用MANIFEST.IN,您可以包含数据文件/配置文件,这些文件/配置文件将在安装软件包后安装到站点软件包中。
查看manifest.in上的文档 https://docs.python.org/2/distutils/sourcedist.html
我相信您随后应该能够导入它/至少通过site-packages目录结构访问它以获取对其的访问权限(尽管第二次打开感觉很hacky)