给定包 my_package
的以下目录结构:
/
├── data/
│ ├── more_data/
│ └── foo.txt
├── my_package/
│ ├── __init__.py
│ └── stuff/
│ └── __init__.py
├── README.md
├── setup.cfg
├── setup.py
如何在不使用 __file__
或其他 hacky 解决方案的情况下,从代码中访问 data/
目录(以最 Pythonic 的方式)?我尝试在 setup.py
中使用 data_files
和 setup.cfg
中的 [options.package_data]
,但没有有效。
我想做这样的事情:
dir_data = importlib.resources.files(data)
csv_files = dir_data.glob('*.csv')
编辑:
我正在使用可编辑的安装,并且包中已有一个 data/
目录(用于与顶级数据无关的源代码)。
最佳答案
我能想到两种解决方案。对于这两种解决方案,目标都是将数据移动到顶级可导入包中(这就是为什么它被称为“包数据”)。这意味着可以通过如下方式访问数据:
importlib.resource.files('mypackage.data')
1.在源代码存储库中移动文件
一个简单直接的解决方案是将 data/
目录移动到 my_package/data/
。然后照常进行包装。
2.让setuptools在构建时“移动”数据
与 package_dir
setuptools 的功能,可以在构建时修改目录结构。
请注意,此方法不适用于“可编辑安装”。
它在 setup.cfg
中可能看起来像这样(未经测试):
[options]
# ...
package_dir=
my_package=my_package
my_package.data=data
关于python - 在Python包目录之外添加数据目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75403882/