【问题标题】:How to put data in a Python package using setup.cfg如何使用 setup.cfg 将数据放入 Python 包中
【发布时间】:2021-12-09 12:04:11
【问题描述】:

我正在尝试使用数据文件创建一个包,但它不起作用。

下面是我的 setup.cfg(每个 link)。

[metadata]
name = my_package
version = 1.0.0
description = My package description
author = John Henckel
author_email = henckel.jonathan@mayo.edu
url = http://example.com
keywords = one, two
license = BSD 3-Clause License
classifiers =
    Framework :: Django
    License :: OSI Approved :: BSD License
    Programming Language :: Python :: 3
    Programming Language :: Python :: 3.5

[options]
include_package_data = True
packages = find:

[options.package_data]
* = *.txt

而我项目的目录结构是……

LICENSE
pyproject.toml
README.md
setup.cfg
my_package
    hello.txt
    __init__.py

然后我输入了...

python -m build --sdist
tar -vtf dist/my_package-1.0.0.tar.gz

如您所见,输出包含hello.txt。为什么不!??

drwxrwxrwx  0 0      0           0 Oct 22 17:28 my_package-1.0.0/
-rw-rw-rw-  0 0      0          48 Oct 22 17:24 my_package-1.0.0/LICENSE
-rw-rw-rw-  0 0      0         474 Oct 22 17:28 my_package-1.0.0/PKG-INFO
-rw-rw-rw-  0 0      0          29 Oct 22 17:24 my_package-1.0.0/README.md
drwxrwxrwx  0 0      0           0 Oct 22 17:28 my_package-1.0.0/my_package/
-rw-rw-rw-  0 0      0           0 Oct 22 17:24 my_package-1.0.0/my_package/__init__.py
drwxrwxrwx  0 0      0           0 Oct 22 17:28 my_package-1.0.0/my_package.egg-info/
-rw-rw-rw-  0 0      0         474 Oct 22 17:28 my_package-1.0.0/my_package.egg-info/PKG-INFO
-rw-rw-rw-  0 0      0         201 Oct 22 17:28 my_package-1.0.0/my_package.egg-info/SOURCES.txt
-rw-rw-rw-  0 0      0           1 Oct 22 17:28 my_package-1.0.0/my_package.egg-info/dependency_links.txt
-rw-rw-rw-  0 0      0          11 Oct 22 17:28 my_package-1.0.0/my_package.egg-info/top_level.txt
-rw-rw-rw-  0 0      0         108 Oct 01 13:52 my_package-1.0.0/pyproject.toml
-rw-rw-rw-  0 0      0         528 Oct 22 17:28 my_package-1.0.0/setup.cfg

【问题讨论】:

    标签: python-3.x package setuptools


    【解决方案1】:

    我怀疑这可能取决于您安装的 setuptools 版本。当我使用相同的setup.cfg 构建您的包的测试版本时,我的源代码分发包含hello.txt。但是,您可能还想尝试从setup.cfg 中删除include_package_data = True 选项。最新的setuptools user guide 说明如下:

    “总而言之,这三个选项允许您:

    • include_package_data 接受 MANIFEST.in 匹配的所有数据文件和目录。
    • package_data 指定其他模式以匹配 MANIFEST.in 可能匹配或不匹配或在源代码管理中找到的文件。
    • exclude_package_data 指定安装包时不应包含的数据文件和目录的模式,即使由于使用了前面的选项而本来应该包含它们。”

    对于某些版本的setuptoolsinclude_package_data 选项可能会覆盖package_data 列表,因此您必须改为提供MANIFEST.in 文件。

    编辑:我在 setuptools 用户指南中忽略了这个声明,这似乎证实了我上面写的内容:

    “如果使用特定于 setuptools 的 include_package_data 参数,则 package_data 指定的文件不会自动添加到清单中,除非它们在 MANIFEST.in 文件中列出。”

    【讨论】:

    • 由于许多包目前正在转换为使用 pyproject.toml,因此了解我的答案是否也适用于其他人可能会有所帮助。
    猜你喜欢
    • 2018-09-24
    • 2022-01-10
    • 2013-05-06
    • 2015-10-31
    • 2022-08-11
    • 2014-07-31
    • 2023-01-04
    • 1970-01-01
    • 2021-04-26
    相关资源
    最近更新 更多