【发布时间】:2011-05-29 23:32:36
【问题描述】:
我使用 setuptools 来分发我的 python 包。现在我需要分发额外的数据文件。
根据我从 setuptools 文档中收集到的信息,我需要将数据文件放在包目录中。但是,我宁愿将我的数据文件放在根目录的子目录中。
我想避免的:
/ #root
|- src/
| |- mypackage/
| | |- data/
| | | |- resource1
| | | |- [...]
| | |- __init__.py
| | |- [...]
|- setup.py
我想拥有什么:
/ #root
|- data/
| |- resource1
| |- [...]
|- src/
| |- mypackage/
| | |- __init__.py
| | |- [...]
|- setup.py
如果不是必需的话,我只是对拥有这么多子目录感到不自在。我找不到原因,为什么我 /have/ 将文件放在包目录中。恕我直言,使用如此多的嵌套子目录也很麻烦。或者有什么好的理由可以证明这种限制是合理的?
【问题讨论】:
-
我问了一个关于使用“data_files”分发资源(文档、图像等)的类似问题:stackoverflow.com/questions/5192386/… ...并且(两个)回复都说要使用“package_data”。现在我正在使用包数据,但这意味着我必须将我的数据和文档放在我的包中,即混合在我的源代码中。我不喜欢这个。在查找我的源代码时,我不仅找到了我正在搜索的类定义,而且还找到了它们在我的 RST、HTML 和中间文件中得到的数十个提及。 :-(
-
我知道这个回复很晚,@JonathanHartley,但是您可以通过添加一个
__init__.py文件将任何目录设为“包”,即使该文件是空白的。因此,您可以将数据目录与空的__init__.py文件分开,使其看起来像一个包。这应该可以防止 grep 从你的源代码树中获取它们,但它仍然会被 python 及其构建工具识别为一个包。 -
@dhj 一个有趣的想法,谢谢。
-
@dhj 这种方法的唯一问题是 python 认为你已经安装了一个名为“data”的包。如果您安装的另一个包试图以相同的方式打包数据,您将安装两个冲突的“数据”包。
标签: python setuptools