【发布时间】:2017-12-22 04:52:57
【问题描述】:
我在 setup.py 脚本中包含数据文件时遇到了问题。我的包设置如下:
my_package/
setup.py
MANIFEST.in
my_package/
__init__.py
access_data.py
data_files/
my_data_file.csv
我想在安装时包含my_data_file.csv 文件,以便access_data.py 可以读取它。为此,我在setuptools 中使用了package_data 关键字:
setup(...,
packages=['my_package'],
package_data={'my_package': ['./my_package/data_files/my_data_file.csv']},
include_package_data=True
)
我还将文件包含在MANIFEST.in:
recursive-include my_package/data_files *
setup.py 似乎运行良好并且没有抛出任何错误。但是,当我导入包时,由于缺少my_data_file.csv,我得到了一个找不到文件的错误。我曾尝试参考其他堆栈溢出问题(尤其是this one),但无法弄清楚我做错了什么。如何让 setup.py 包含必要的数据文件?
【问题讨论】:
-
您使用的是不区分大小写的文件系统吗?
manifest.in真的应该是MANIFEST.in。但这并不重要,因为MANIFEST.in用于源代码分发 (sdist)。 -
调试时首先想到的是将大问题拆分成许多小问题。让我们一步一步来。第 1 步:检查您的发行版(sdist、egg 或 wheel)是否确实包含
my_data_file.csv;如果没有,请修复setup.py以包含它。第 2 步:检查是否安装了my_data_file.csv。第 3 步 - 调试为什么即使文件就位也无法访问文件(文件路径错误?权限?) -
你的行应该是
package_data={'my_package': ['data_files/my_data_file.csv']},(在my_package包下,没有my_package目录)
标签: python setuptools packaging setup.py