在setup.py中包含数据文件

use*_*153 5 python packaging setuptools setup.py

我在setup.py脚本中包含数据文件时遇到麻烦。我的程序包设置如下:

my_package/
    setup.py
    MANIFEST.in

    my_package/
        __init__.py
        access_data.py

        data_files/
            my_data_file.csv
Run Code Online (Sandbox Code Playgroud)

我想my_data_file.csv在安装时包括该文件,以便可以读取access_data.py。为此,我在中使用了package_data关键字setuptools

setup(...,
      packages=['my_package'],
      package_data={'my_package': ['./my_package/data_files/my_data_file.csv']},
      include_package_data=True
      )
Run Code Online (Sandbox Code Playgroud)

我还将文件包含在MANIFEST.in

recursive-include my_package/data_files *
Run Code Online (Sandbox Code Playgroud)

setup.py似乎运行良好,并且不会引发任何错误。但是,当我导入程序包时,我得到一个文件找不到错误,因为my_data_file.csv丢失了。我尝试引用其他堆栈溢出问题(尤其是这个问题),但无法弄清楚我在做什么错。如何获取setup.py以包含必要的数据文件?

Ant*_*ile 5

如果在上市setup.pypackage_data(正确的),你不应该需要把它列入MANIFEST.in(因为它会自动包含)

在您的情况下,错误出在您的package_data行上,路径是相对于名称空间根目录的

在您的情况下,应为:

package_data={'my_package': ['data_files/my_data_file.csv']},
Run Code Online (Sandbox Code Playgroud)

还要注意,包装数据中的键是点划线的模块路径(但是,对于此玩具盒而言,它不是超级相关)。

  • 对于那些不知道虚线名称到底是什么的人:包是一种通过使用“虚线模块名称”来构造Python模块名称空间的方法。例如,模块名称AB在名为A的包中指定了一个名为B的子模块。([源链接](https://docs.python.org/3/tutorial/modules.html)) (2认同)