setuptools的.如何使包中包含额外的数据文件夹和所有文件夹

Pol*_*Pol 5 python filenames setuptools

所以我正在制作setuptool包.

要在包中包含额外的数据文件,我需要在其中加入specefy data_file参数setup().

代码示例:

datadir = os.path.join('share','data')
datafiles = [(datadir, [f for f in glob.glob(os.path.join(datadir, '*'))])]
import metainfo # a file with relevant information
setup(
    name             = 'yourpackage',
    version          = metainfo.version,
    maintainer       = metainfo.maintainer,
    maintainer_email = metainfo.maintainer_email,
    author           = metainfo.authors,
    author_email     = metainfo.authors,
    description      = metainfo.description,
    keywords         = metainfo.keywords,
    long_description = metainfo.long_description,

    # package installation
    packages = find_packages('src'),
    package_dir  = package_dir,

    data_files = datafiles,
}
Run Code Online (Sandbox Code Playgroud)

datafile 此示例中的变量将包含这样的数据

[('share/data', ['share/data/addon.xml.tmplt', 'share/data/default.py.tmplt'])]
Run Code Online (Sandbox Code Playgroud)

但是,我的示例不会递归地生成文件夹列表和包含文件.

我需要作为参数folder_path获取的函数并返回元组列表:

[
    ('share/data', ['share/data/addon.xml.tmplt', 'share/data/default.py.tmplt']),
    ('share/data/inside', ['share/data/inside/file.iside', 'share/data/inside/file2.inside']),
    .........

]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

使用os.walk()生成的信息:

datafiles = [(root, [os.path.join(root, f) for f in files])
    for root, dirs, files in os.walk(datadir)]
Run Code Online (Sandbox Code Playgroud)

那会产生绝对的路径; 如果需要,您可以root稍微处理变量以使它们相对于setup.py目录.