Python Forum

Full Version: Including data files in a package
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I want to create a binary package (Wheel) and possibly also a source package (tarball). I need to include a reference file and a help file. I believe I can do this for the source package just by stating them in MANIIFEST.in, but all the information I have found on the Web states that for a binary package I need to use setup.py.
This Python tutorial states
Static metadata (setup.cfg) should be preferred. Dynamic metadata (setup.py) should be used only as an escape hatch when absolutely necessary. setup.py used to be required, but can be omitted with newer versions of setuptools and pip.
I would prefer to follow the official recommendation, is there a way to include my files with a statement in setup.cfg perhaps?
(Oct-24-2021, 07:33 PM)ChrisOfBristol Wrote: [ -> ]but all the information I have found on the Web states that for a binary package I need to use setup.py.
To do most setup from setup.cfg is relative new,so most tutorial/demo you find on web will be for setup.py.
Can still use setup.py it will work fine or can rewrite it to use setup.cfg
Look at Configuring setup() using setup.cfg files
A sample Python project

And look my answer in your last post.
in setup.cfg to add files eg .dat use [options.data_files](same as package_data).

In link you see for setup.py is this way.
# If there are data files included in your packages that need to be
# installed, specify them here.
package_data={  # Optional
        'sample': ['package_data.dat'],
    },
(Oct-24-2021, 09:11 PM)snippsat Wrote: [ -> ]Look at Configuring setup() using setup.cfg files
The above states the following without any explanation of what the elements are:
[options.data_files]
/etc/my_package =
site.d/00_default.conf
host.d/00_default.conf
data = data/img/logo.png, data/svg/icon.svg
fonts = data/fonts/*.ttf, data/fonts/*.otf

I've no idea what site.d... or host.d... mean. I imagine that the line starting data means create a directory called "data" and copy the following files into it. I'll try:
[options.data_files]
data = reference.dat, help.html
Can just use [options.package_data] this will add .dat and .rst files,work for me when i test
[options.package_data]
* = *.dat, *.rst
So same setup as this,but added somefile.dat
And importlib.resources sa shown here
packaging_tutorial/
└── src/
    └── example_package/
        ├── __init__.py
        └── example.py
        └── somefile.dat
# Build
(pack_tut) G:\div_code\pack_tut\packaging_tutorial
λ python -m build
* Creating venv isolated environment..
..... ect
Successfully installed example-pkg-YOUR-USERNAME-HERE-0.0.1

# install
(pack_tut) G:\div_code\pack_tut\packaging_tutorial\dist
λ pip install example_pkg_YOUR_USERNAME_HERE-0.0.1-py3-none-any.whl --force-reinstall
.....
Successfully installed example-pkg-YOUR-USERNAME-HERE-0.0.1

# Test that it work
(pack_tut) G:\div_code\pack_tut\packaging_tutorial
λ python
Python 3.9.5 (tags/v3.9.5:0a7dcbd, May  3 2021, 17:27:52) [MSC v.1928 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from example_package import example
>>>
>>> example.add_one(2)
3
# Can now use somefile.dat here
>>> example.add_one(int(example.number))
43
The documentation on this is very confusing and the statements conflict in certain circumstances. A bug report/enhancement request has been made.

This works:

[options]
package_dir =
= src
packages = find:
python_requires = >=3.7
include_package_data = True

[options.packages.find]
where = src


With this in MANIFEST.in:

include src/mymodules/myapp.dat src/mymodules/myapp.html src/mymodules/myapp.hlp

The package has now been published.