https://github.com/freed-wu/setuptools-generate
Generate shell completions and man page when building a python package.
https://github.com/freed-wu/setuptools-generate
build generate man python setuptools shell-completion
Last synced: 7 months ago
JSON representation
Generate shell completions and man page when building a python package.
- Host: GitHub
- URL: https://github.com/freed-wu/setuptools-generate
- Owner: Freed-Wu
- License: gpl-3.0
- Created: 2022-12-13T14:41:42.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2025-07-07T18:32:35.000Z (7 months ago)
- Last Synced: 2025-07-07T22:05:38.541Z (7 months ago)
- Topics: build, generate, man, python, setuptools, shell-completion
- Language: Python
- Homepage: https://setuptools-generate.readthedocs.io/
- Size: 89.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Citation: CITATION.cff
Awesome Lists containing this project
README
# setuptools-generate
[](https://results.pre-commit.ci/latest/github/Freed-Wu/setuptools-generate/main)
[](https://github.com/Freed-Wu/setuptools-generate/actions)
[](https://codecov.io/gh/Freed-Wu/setuptools-generate)
[](https://setuptools-generate.readthedocs.io)
[](https://github.com/Freed-Wu/setuptools-generate/releases)
[](https://github.com/Freed-Wu/setuptools-generate/releases/latest)
[](https://github.com/Freed-Wu/setuptools-generate/issues)
[](https://github.com/Freed-Wu/setuptools-generate/issues?q=is%3Aissue+is%3Aclosed)
[](https://github.com/Freed-Wu/setuptools-generate/pulls)
[](https://github.com/Freed-Wu/setuptools-generate/pulls?q=is%3Apr+is%3Aclosed)
[](https://github.com/Freed-Wu/setuptools-generate/discussions)
[](https://github.com/Freed-Wu/setuptools-generate/milestones)
[](https://github.com/Freed-Wu/setuptools-generate/network/members)
[](https://github.com/Freed-Wu/setuptools-generate/stargazers)
[](https://github.com/Freed-Wu/setuptools-generate/watchers)
[](https://github.com/Freed-Wu/setuptools-generate/graphs/contributors)
[](https://github.com/Freed-Wu/setuptools-generate/graphs/commit-activity)
[](https://github.com/Freed-Wu/setuptools-generate/commits)
[](https://github.com/Freed-Wu/setuptools-generate/releases/latest)
[](https://github.com/Freed-Wu/setuptools-generate/blob/main/LICENSE)
[](https://github.com/Freed-Wu/setuptools-generate)
[](https://github.com/Freed-Wu/setuptools-generate)
[](https://github.com/Freed-Wu/setuptools-generate)
[](https://github.com/Freed-Wu/setuptools-generate)
[](https://github.com/Freed-Wu/setuptools-generate)
[](https://github.com/Freed-Wu/setuptools-generate)
[](https://pypi.org/project/setuptools-generate/#description)
[](https://pypi.org/project/setuptools-generate/#history)
[](https://pypi.org/project/setuptools-generate/#files)
[](https://pypi.org/project/setuptools-generate/#files)
[](https://pypi.org/project/setuptools-generate/#files)
[](https://pypi.org/project/setuptools-generate/#files)
Generate shell completions and man page when building a python package.
## Usage
Add this package to your build requires:
```toml
[build-system]
requires = [ "setuptools-generate >= 0.0.6",]
build-backend = "setuptools.build_meta"
[project]
name = "demo"
version = "0.0.1"
[project.scripts]
demo = "demo:main"
[tool.setuptools.data-files]
"share/application" = [ "assets/desktop/demo.desktop",]
"share/icons/hicolor/256x256/apps" = [ "src/demo/assets/images/demo.png",]
"share/man/man1" = [ "sdist/demo.1",]
"share/bash-completion/completions" = [ "sdist/demo",]
"share/zsh/site-functions" = [ "sdist/_demo",]
```
Build your package:
```sh
python -m build
```
```console
$ tree sdist
sdist
├── _demo # zsh completion script
├── demo # bash completion script
├── demo.1 # man page
└── demo.fish # fish completion script
$ tree dist
dist
├── demo-0.0.1-py3-none-any.whl # wheel file
└── demo-0.0.1.tar.gz # source distribution file
```
You got them.
Now `pip install --prefix=/the/root/of/usr dist/*.whl`, you will see:
```sh
$ tree /the/root/of/usr
/the/root/of/usr
├── bin
│ └── trans
├── lib
│ └── python3.10
│ └── site-packages
│ ├── foo
│ │ └── ...
│ └── foo-0.0.1.dist-info
│ └── ...
└── share
~ ├── application
~ │ └── foo.desktop
~ ├── bash-completion
~ │ └── completions
~ │ └── foo
~ ├── icons
~ │ └── hicolor
~ │ └── 256x256
~ │ └── apps
~ │ └── foo.png
~ ├── man
~ │ └── man1
~ │ └── foo.1
~ └── zsh
~ └── site-functions
~ └── _foo
```
For linux package (`deb`, `rpm`, `pkg.zst`, ...), it will be very easy.
Example projects:
- [demo for click](https://github.com/Freed-Wu/setuptools-generate/tree/main/tests/click/src)
- [demo for shtab](https://github.com/Freed-Wu/setuptools-generate/tree/main/tests/shtab/src)
- See more on [wiki](https://github.com/Freed-Wu/setuptools-generate/wiki).
See [document](https://setuptools-generate.readthedocs.io) to know more.