5
I want to build a python package using setuptools. The folder structure of the project is the following (some non-essential parts have been deleted):
energy-monitor
βββ config
β βββ config.yml
β βββ secrets.yml
βββ data
β βββ cpu_tdp.json
βββ energy_monitor
β βββ core
β β βββ gui.py
β β βββ __init__.py
β βββ data
β β βββ tableExport.json
β βββ __init__.py
β βββ main.py
β βββ utils
β βββ api_calls.py
β βββ __init__.py
βββ energy-monitor.py
βββ LICENSE
βββ MANIFEST.in
βββ pyproject.toml
βββ README.md
βββ requirements.txt
The content of the pyproject.toml file is the following (some non-essential parts have been deleted):
[build-system]
requires = ["setuptools>=68.0"]
build-backend = "setuptools.build_meta"
[project]
name = "energy_monitor"
version = "0.0.1"
description = "Energy monitor"
readme = "README.md"
requires-python = ">=3.11"
license = {text = "GPLv3"}
classifiers = [
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
]
dynamic = ["dependencies"]
[tool.setuptools.dynamic]
dependencies = {file = ["requirements.txt"]}
[tool.setuptools]
packages = [
"energy_monitor",
"energy_monitor.core",
"energy_monitor.utils"
]
include-package-data = true
[project.scripts]
energy-monitor = "energy_monitor.main:main"
Finally, the content of the MANIFEST.in file is the following:
include README.md
include LICENSE
graft config
I generate the package with python -m build
and install the .tar.gz archive with pipx
.
According to setuptools documentation, I expect to find my config folder, together with README and LICENSE in the interpreter directory (site-packages) after the installation. However, this doesn't happen and I cannot run the app becase it complains that it doesn't find the config. What am I missing?
I don't have any experience with pipx and personally prefer to just skip the .toml and place the whole pyprojectsetup in setup.py.
With that method, I would write inside setup()
This would however require you to have a package folder which all your package files/folders are inside, meaning the top level repo folder should not have any files or other folders that you want to distribute. Your MANIFEST.in looks fine.