【问题标题】:setuptools does not distribute my data filessetuptools 不分发我的数据文件
【发布时间】:2018-08-21 05:13:19
【问题描述】:

我在setup.py中有以下内容:

from setuptools import setup
# ...
setup(
    name='xml-boiler',
    version='0.0.1',
    url='https://github.com/vporton/xml-boiler',
    license='AGPLv3',
    author='Victor Porton',
    author_email='porton@narod.ru',
    description='Automatically transform between XML namespaces',

    packages=find_packages(),
    package_data={'': ['*.ttl', '*.xml']},
    scripts=['bin/boiler'],
    data_files = [
        ('/etc/xmlboiler', ['etc/config-cli.ttl'])
    ],
    test_suite="xmlboiler.tests",

    cmdclass={'build_py': MyBuild},
)

但是在我运行python setup.py build 之后,构建目录不包含任何*.xml*.ttl 文件。

我的错误是什么?

我还想分发来自xmlboiler/core/data/assets/ 的所有文件和 xmlboiler/core/data/assets/.


我不明白它是如何工作的:

package_data={'': ['*/.xml', '*/.ttl', '*/.net', 'data/assets/*', 'data/scripts/*.xslt', 'xmlboiler/doc/*.html', 'xmlboiler/doc/*.css']}, 

包括xmlboiler/core/data/scripts/section.xslt,但不包括xmlboiler/tests/core/data/xml/simple.xml。为什么?!

【问题讨论】:

    标签: python python-3.x setuptools


    【解决方案1】:

    package_data 是包名称到文件或文件 glob 的映射。这意味着

    package_data = {'', ['*.xml', '*.ttl']}
    

    将包括位于任何包目录中的每个以.xml.ttl 结尾的文件,例如xmlboiler/file.xmlxmlboiler/core/file.ttl 等。但是,它将不包括文件xmlboiler/core/data/interpreters.ttl,因为它位于@ 987654328@ 不是包目录(不包含__init__.py 文件)。要包含它,您应该使用正确的文件路径:

    package_data = {'xmlboiler.core', ['data/interpreters.ttl']}
    

    要包含xmlboiler/core/data 下的每个.ttl 文件:

    package_data = {'xmlboiler.core', ['data/*.ttl', 'data/**/*.ttl']}
    

    这将包括 data 目录 (glob data/*.ttl) 中的每个 .ttl 文件和 data (glob data/**/*.ttl) 的每个子目录中的每个 .ttl 文件。

    在每个包中包含每个 .ttl.xml 文件:

    package_data = {'', ['*.xml', '**/*.xml', '*.ttl', '**/*.ttl']}
    

    我也想分发来自xmlboiler/core/data/assets/的所有文件

    data/assets 的方法相同,但省略了 glob 中的文件扩展名:

    package_data={
        'xmlboiler.core': ['data/assets/*', 'data/assets/**/*'],
    }
    

    【讨论】:

    • 我不明白它是如何工作的:~~~ package_data={'': ['*/.xml', '*/.ttl'、'*/.net'、'data/assets/*'、'data/scripts/*.xslt'、'xmlboiler/doc/*.html'、'xmlboiler/ doc/*.css']},~~~ 包括 xmlboiler/core/data/scripts/section.xslt` 但不包括 xmlboiler/tests/core/data/xml/simple.xml。为什么?!
    • 要通过 package_data 包含,文件必须匹配其中一个 glob 模式。 section.xslt 匹配 data/scripts/*.xslt 并包含在内。 simple.xml 不匹配任何模式。示例模式:*.xml(当前目录中的任何 xml 文件)、**/*.xml(任何目录中的任何 xml 文件)、data/scripts/*.xmldata/scripts 中的任何 xml 文件)、data/scripts/**/*.xml(任何子目录中的任何 xml 文件) data/scripts)。
    猜你喜欢
    • 1970-01-01
    • 2019-08-05
    • 2011-05-29
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    相关资源
    最近更新 更多