I want to include the ./static/data.txt to setuptools, here is my code:
# setup.py
import os,glob
from setuptools import setup,find_packages
setup(
name = "PotatoProject",
version = "0.1.1",
author = "Master Splinter",
author_email = "<a href="https://getridbug.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4e3d3e2227203a2b3c0e2720273a2b2d26602d2123">[email protected]</a>",
description = ("The potatoproject!"),
url = 'http://www.google.com',
license = "BSD",
# adding packages
packages=find_packages('src'),
package_dir = {'':'src'},
# trying to add files...
include_package_data = True,
package_data = {
'': ['*.txt'],
'': ['static/*.txt'],
'static': ['*.txt'],
},
scripts=['src/startPotato'],
classifiers=[
"Development Status :: 3 - Alpha",
"Topic :: Utilities",
"License :: OSI Approved :: BSD License",
],
)
The file system:
.
├── setup.py
└── src
├── distutils_setup.py
├── Potato
│ ├── __init__.py
│ ├── potatoData.txt
│ └── printer.py
├── startPotato
├── static
│ └── data.txt
└── Tomato
├── big.py
└── __init__.py
the output when running: python setup.py sdist
running sdist running egg_info creating src/PotatoProject.egg-info writing src/PotatoProject.egg-info/PKG-INFO writing top-level names to src/PotatoProject.egg-info/top_level.txt writing dependency_links to src/PotatoProject.egg-info/dependency_links.txt writing manifest file 'src/PotatoProject.egg-info/SOURCES.txt' reading manifest file 'src/PotatoProject.egg-info/SOURCES.txt' writing manifest file 'src/PotatoProject.egg-info/SOURCES.txt' warning: sdist: standard file not found: should have one of README, README.txt creating PotatoProject-0.1.1 creating PotatoProject-0.1.1/src creating PotatoProject-0.1.1/src/Potato creating PotatoProject-0.1.1/src/PotatoProject.egg-info creating PotatoProject-0.1.1/src/Tomato making hard links in PotatoProject-0.1.1... hard linking setup.py -> PotatoProject-0.1.1 hard linking src/startPotato -> PotatoProject-0.1.1/src hard linking src/Potato/__init__.py -> PotatoProject-0.1.1/src/Potato hard linking src/Potato/printer.py -> PotatoProject-0.1.1/src/Potato hard linking src/PotatoProject.egg-info/PKG-INFO -> PotatoProject-0.1.1/src/PotatoProject.egg-info hard linking src/PotatoProject.egg-info/SOURCES.txt -> PotatoProject-0.1.1/src/PotatoProject.egg-info hard linking src/PotatoProject.egg-info/dependency_links.txt -> PotatoProject-0.1.1/src/PotatoProject.egg-info hard linking src/PotatoProject.egg-info/top_level.txt -> PotatoProject-0.1.1/src/PotatoProject.egg-info hard linking src/Tomato/__init__.py -> PotatoProject-0.1.1/src/Tomato hard linking src/Tomato/big.py -> PotatoProject-0.1.1/src/Tomato Writing PotatoProject-0.1.1/setup.cfg creating dist Creating tar archive removing 'PotatoProject-0.1.1' (and everything under it)
and no txt added! No static/data.txt nor Potato/potatoData.txt…
What am I missing?!
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
As pointed out in the comments, there are 2 ways to add the static files:
1 – include_package_data=True + MANIFEST.in
A MANIFEST.in file in the same directory of setup.py that looks like this:
include src/static/* include src/Potato/*.txt
With include_package_data = True in setup.py.
2 – package_data in setup.py
package_data = {
'static': ['*'],
'Potato': ['*.txt']
}
Specify the files inside the setup.py.
Do not use both include_package_data and package_data in setup.py.
include_package_data will nullify the package_data information.
Official docs:
https://setuptools.readthedocs.io/en/latest/userguide/datafiles.html
Method 2
Include all files recursively:
recursive-include project_name/templates * recursive-include project_name/static *
where project_name is a folder in the same line where you have setup.py file.
Method 3
According to the docs, there are three ways to include package data files. You have two packages: Potato and Tomato. The static directory is not in either of those packages, so that is why your package_data dictionary in setup.py was not working. The manifest option requires that include_package_data is set to True in setup.py. Access non-package data files can be done the way found here.
Method 4
Use following
packages = ['.','templates','static','docs'],
package_data={'templates':['*'],'static':['*'],'docs':['*'],},
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0