A "dev-shell" for Python projects ;)
This small project is intended to improve the start-up for collaborators.
The idea is to make the project setup as simple as possible. Just clone the sources and start a script and you're done ;)
Why in hell not just a Makefile? Because it doesn't out-of-the-box under Windows and MacOS, the dev-shell does ;)
Run Tests? Just start the script and call the "run test command".
The "dev-shell" is the base to create a CLI and a shell. It also shows how to make a project bootstrap as simply as possible, e.g.:
At least uv is needed. Install e.g.: via pipx:
apt-get install pipx
pipx install uv
Clone the project and just start the CLI help commands. A virtual environment will be created/updated automatically.
~$ git clone https://codeberg.org/jedie/dev-shell.git
~$ cd dev-shell
~/dev-shell$ devshell.py --help
~/dev-shell$ devshell.py test
The output looks like:
Cmd2 Commands
─────────────
alias help history macro quit set shortcuts
dev-shell commands
──────────────────
coverage install publish test version
fix_code_style list_venv_packages pyupgrade update
compatibility
| dev-shell version | OS | Python version |
|---|---|---|
| >=v0.10.0 | Linux + MacOS + Windows | 3.14, 3.13, 3.12 |
| >=v0.7.0 | Linux + MacOS + Windows | 3.11, 3.10, 3.9 |
| >=v0.5.0 | Linux + MacOS + Windows | 3.10, 3.9, 3.8, 3.7 |
| >=v0.0.1 | Linux + MacOS + Windows | 3.9, 3.8, 3.7 |
See also:
- github test configuration: .github/workflows/test.yml
- Nox configuration: noxfile.py
History
- v0.12.0
- 2026-09-15 - Give up GitHub -> Codeberg / OpenCommit / GitLab / Redicle
- 2026-08-07 - Use always latest versions for local development
- 2026-08-07 - remove obsolete v3.9 fallback
- 2026-08-07 - update outdated command docstring
- 2026-06-11 - Update README.md
- v0.11.1
- 2026-06-11 - fix _print_info() if Path instance pass as arguments
- v0.11.0
- 2026-06-11 - Remove uv.lock from this repo: It's a library not a project
- 2026-06-11 - nox: reuse venv
- 2026-06-11 - NEW: CategorizedCommandSet replacement for @cmd2.with_default_category()
- 2026-06-11 - fix linting
- 2026-06-11 - Update requirements
- 2026-05-29 - Bump uv from 0.11.6 to 0.11.15
- 2026-04-10 - Bump uv from 0.10.4 to 0.11.6
- 2026-04-08 - Bump cryptography from 46.0.6 to 46.0.7
- 2026-03-30 - Bump pygments from 2.19.2 to 2.20.0
- 2026-03-29 - Bump cryptography from 46.0.5 to 46.0.6
- v0.10.2
- 2026-02-19 - apply manageprojects updates
- 2026-02-19 - Bugfix colorful helpers if a Path instance should be printed.
Expand older history entries ...
- v0.10.1
- 2026-02-10 - Bugfix text color styles
- v0.10.0
- 2026-02-10 - Cleanup
- 2026-02-09 - Update project
- v0.9.1
- 2025-03-11 - Fix usage as package in external projects
- v0.9.0
- 2025-03-11 - fix publish
- 2025-03-11 - Replace
poetrywithuv
- v0.8.0
- 2024-04-09 - Bump version to v0.8.0
- 2024-04-09 - Remove "gnureadline" as dependency and update boot script
- 2024-04-09 - Remove "gnureadline" as dependency
- 2023-07-09 - Update requirements
- v0.7.0
- 2023-04-25 - Bugfix RedirectStdOutErr
- 2023-04-25 - Update test matrix
- 2023-04-25 - Update requirements
- 2022-09-19 - skip linting (we use darker)
- 2022-09-19 - CI: cache packages
- v0.6.1
- 2022-09-02 - Update README.md
- 2022-09-02 - v0.6.1 - update tests adn README
- 2022-09-02 - remove "pytest-flake8" and "pytest-isort"
- 2022-09-02 - update requirements
- 2022-09-02 - Call "poetry update" with "-v"
- 2022-09-02 - skip Poetry v1.2.0
- 2022-09-02 - Set default timeout to 5Min.
- v0.6.0
- 2022-07-19 - updates
- 2022-07-19 - dd "pyupgrade" as shell command
- 2022-07-19 - Update README.md
- 2022-07-19 - Update requirements
- v0.5.0
- 2022-05-29 - update flake8 config
- 2022-05-29 - simplify isort config
- 2022-05-29 - fix isort checks
- 2022-05-29 - v0.5.0.rc1
- 2022-05-29 - update tox settings
- 2022-05-29 - line_length = 100
- 2022-05-29 - call github tests via tox
- 2022-05-29 - Add "tox" and "poetry" commands
- 2022-05-29 - Test also with Python 3.10
- 2022-05-29 - Update requirements
- v0.4.0
- 2022-02-28 - Release v0.4.0
- 2022-02-28 - Update requirements
- v0.3.0
- 2022-01-30 - Remove "flynt" form linting/fix code style
- v0.2.4
- 2022-01-22 - Switch to darker and use pytest-darker
- 2022-01-22 - update requirements
- v0.2.3
- 2021-11-15 - Fix #29 - Flynt args can be change via CommandSet
- 2021-11-15 - update requirements
- 2021-11-15 - Update test.yml
- v0.2.2
- 2021-04-12 - include source "bootstrap" file
- v0.2.1
- 2021-04-12 - Handle if "poetry-publish" is not installed
- v0.2.0
- 2021-04-11 - Fix flake8 call: Remove arguments and add .flake8 config file
- 2021-04-11 - Update dependencies + add "update" command
- 2021-04-11 - Release 0.2.0rc1
- 2021-04-11 - Fix #24 test under windows
- 2021-04-10 - The DocTest will not work on Windows. Replace it with a normal test ;)
- 2021-04-10 - Bugfix error on Windows: File "C:\Users\sysop\PycharmProjects\dev-shell\dev_shell\utils\subprocess_utils.py", line 125, in prepare_popenargs command = shutil.which(command_path, path=bin_path) File "C:\Users\sysop\AppData\Local\Programs\Python\Python39\lib\shutil.py", line 1441, in which if any(cmd.lower().endswith(ext.lower()) for ext in pathext): File "C:\Users\sysop\AppData\Local\Programs\Python\Python39\lib\shutil.py", line 1441, in if any(cmd.lower().endswith(ext.lower()) for ext in pathext): AttributeError: 'WindowsPath' object has no attribute 'lower' EXCEPTION of type 'AttributeError' occurred with message: ''WindowsPath' object has no attribute 'lower''
- 2021-04-10 - Replace "SubprocessMock" with a simple function
- 2021-04-10 - Bugfix calls outside the project directory...
- 2021-04-10 - Do linting via tests
- 2021-04-10 - Update also "setuptools", too.
- 2021-04-05 - fix tests
- 2021-04-05 - code style
- 2021-04-05 - recognize "--update" and "--help" calls better
- 2021-04-05 - remove "max-parallel"
- 2021-03-26 - Rename: "dev-shell.py => devshell.py" and add tests for it
- 2021-03-26 - Auto update .venv if poetry.lock changed
- 2021-03-22 - Update README.md
- 2021-03-22 - Remove "path" argument from flynt and autopep8
- v0.1.0
- 2021-03-22 - release v0.1.0
- 2021-03-22 - Better "run as CLI" implementation
- 2021-03-22 - Update README.md
- 2021-03-19 - Bugfix handle of sys.exit() and return code (Imporant for CI usage)
- 2021-03-22 - Update test.yml
- 2021-03-20 - +!.github
- 2021-03-20 - Update dev-shell.py
- 2021-03-20 - add gitignore
- 2021-03-19 - Bugfix subprocess call: Don't feed shutil.which() with Path() instance
- v0.0.2
- 2021-03-19 - refactor colorful
- v0.0.1
- 2021-03-19 - activate codecov.io
- 2021-03-19 - Run linters on github actions
- 2021-03-19 - Bugfix linting
- 2021-03-19 - bump to version v0.0.1
- 2021-03-19 - refactor and add linting and "fix_code_style" commands
- 2021-03-19 - fix code style
- 2021-03-19 - subprocess utils: Search for command in PATH
- 2021-03-19 - update requirements
- 2021-03-19 - Create a generic CmdAppBaseTestCase
- 2021-03-19 - code cleanup
- 2021-03-19 - Update README.md
- 2021-03-19 - Bugfix Python 3.7 subprocess calls with Path() instances
- 2021-03-19 - Bugfixes for windows
- 2021-03-19 - Test on macos, too - TODO: Add windows support
- 2021-03-19 - Update README
- 2021-03-18 - add readme
- 2021-03-18 - bugfix github action
- 2021-03-18 - Activate github actions
- 2021-03-18 - make it alive
- 2021-03-18 - init
- 2021-03-18 - Initial commit
Project links
GitHub suspended me!
Important notice:
GitHub suspended my account sometime in late August 2026 ! There was no warning beforehand, nor any explanation of the reasons afterwards. Since then, I have had no access or control over my data on GitHub.
All my projects and everything about me have completely disappeared. Everything just results in a 404 "Not Found" error page.
A support request still hasn't been answered, even after several weeks (apart from a confirmation that the request was received).
For that reason, I have been looking for a new home for all my OpenSource projects. (Or rather, I am in the process of republishing all my projects elsewhere.)
Now you can find my on these places:
- Codeberg.org/jedie
- OpenCommit.eu/jedie
- GitLab.com/users/jedie
- Radicle: did🔑z6MkfvNUuBCwRtNZwANEAGd4vaTzyuZXMKfiSyjoBALga934 | jedie.radicle.garden
That is why there will probably be a lot of broken links pointing to my GitHub account for quite some time!
#GitHubSuspendedMe #GiveUpGitHub
- Codeberg: https://codeberg.org/jedie/dev-shell/
- OpenCommit: https://opencommit.eu/jedie/dev-shell/
- GitLab: https://gitlab.com/jedie/dev-shell/
- PyPi: https://pypi.org/project/dev-shell/
Metadata
Release files for dev-shell 0.12.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dev_shell-0.12.0.tar.gz | 29.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dev_shell-0.12.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 63.1 kB
Release files / dev_shell-0.12.0.tar.gz
| Download URL | dev_shell-0.12.0.tar.gz |
|---|---|
| Size | 29.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f55bd931102a3b88a84400dad5f13f3d6b97d5ca33b20f9cd43b68f430539275
|
|
BLAKE2b-256 checksum How to use checksums |
053be64a8b273541e055a19a5854033f4fe19692e2fe442bb9fa5fb685ecca9e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / dev_shell-0.12.0-py3-none-any.whl
| Download URL | dev_shell-0.12.0-py3-none-any.whl |
|---|---|
| Size | 33.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
61ca648cee9fbba333db831f4dda940f503424df343fa955f09cfa32ba2f96b2
|
|
BLAKE2b-256 checksum How to use checksums |
278e276e3c66bbbe3f02e667ca4b9cf064d275bfaba69a470c1c1aa0e3a64677
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|