如何使用 setup.cfg 将数据放入 Python 包中
How to put data in a Python package using setup.cfg
我正在尝试使用数据文件创建一个包,但它不起作用。
我的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
我怀疑这可能取决于您安装的 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
指定数据文件和目录的模式,这些文件和目录在安装包时不应包括在内,即使它们本来会因使用前面的选项而被包括在内。"
对于某些版本的 setuptools
,include_package_data
选项可能会覆盖 package_data
列表,因此您必须提供 MANIFEST.in
文件。
编辑:我在 setuptools 用户指南中忽略了这个声明,这似乎证实了我上面写的内容:
“如果使用特定于 setuptools 的 include_package_data
参数,由 package_data 指定的文件将不会自动添加到清单中,除非它们在 MANIFEST.in 文件中列出。”。 =23=]
我正在尝试使用数据文件创建一个包,但它不起作用。
我的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
我怀疑这可能取决于您安装的 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
指定数据文件和目录的模式,这些文件和目录在安装包时不应包括在内,即使它们本来会因使用前面的选项而被包括在内。"
对于某些版本的 setuptools
,include_package_data
选项可能会覆盖 package_data
列表,因此您必须提供 MANIFEST.in
文件。
编辑:我在 setuptools 用户指南中忽略了这个声明,这似乎证实了我上面写的内容:
“如果使用特定于 setuptools 的 include_package_data
参数,由 package_data 指定的文件将不会自动添加到清单中,除非它们在 MANIFEST.in 文件中列出。”。 =23=]