Packer
A Python automation tool that streamlines Python release workflows: creating archives, uploading them to GoFile, updating Git repositories, publishing GitHub releases with AI-generated notes, and building, uploading wheels to PyPI.
Contents
- Requirements
- Installation
- Usage
- Demos
- Configuration
- Extra notes
- Warning
- Features
- Feedback and Suggestions
- Changelog
- In future updates
Requirements
- python >=3.10 (unless you use one of the executables)
- git, For lots of things
- GitHub account, For creating a GitHub release
- GoFile account [optional] For uploading to your profile tied folder.
- ollama [optional] For AI generated version description, name and git diff summarization in the change module.
- PyPI account [optional] For uploading to PyPI
Installation
Available via multiple methods — choose whichever fits your workflow:
From GitHub Releases
Prebuilt artifacts are published on the Releases page:
- PyInstaller executables: standalone binaries —
packerfor Linux systems andpacker.exefor Windows. - Wheel file: a Python
.whlbuilt with thebuildpackage for easy installation on any platform. - Source archives:
tar.gz/zipsource distributions for local builds.
Example install for a downloaded wheel:
pip install packer-x.y.z-py3-none-any.whl
From PyPI
A release is also published to PyPI under the name packer-release:
pip install packer-release
From source (GitHub clone)
Install from source in a virtual environment after cloning the repository:
git clone https://github.com/EMILIO888real/Packer.git
cd Packer
python -m venv .venv
source .venv/bin/activate
pip install .
Note: There are 2 branches master (somewhat stable, default) and development (latest changes, updates every 1-3 days)
Or let pip clone and build directly from the GitHub repository (no manual clone required):
pip install git+https://github.com/EMILIO888real/Packer.git
From a source archive (GoFile)
If you prefer to install from a downloaded source archive, download the archive from the GoFile archive and install it with pip:
pip install /path/to/packer-x.y.z.tar.gz
After installing, continue following instructions in this README.
Usage
After installing the project, you can run it from the command line using the command packer.
Basic example
TUI
packer
GUI
packer -g
CLI
packer run -p packer -v m
Packer is also usable as a library: you can import parts of it into your own Python projects and call its functions or classes programmatically. Example:
from packer import Packer # <- this works because the object is public. full path: packer.core.Packer
# or import specific helpers
from packer.actions import run # <- Isn't public, so full import path is needed.
from packer.config import Project
instance = Packer(**kwargs)
try:
instance.run()
except KeyboardInterrupt:
print('User canceled, reverting changes...')
instance.revert_changes()
run(Project(**kwargs))
Explore more about how to use it as a library by checking out the top __init__.py for available public python objects and doctype for those objects on use case.
Note: You can't import Packer if you installed one of the executables
Interfaces
- CLI: Primary command-line interface; run
packerwith any command or flag. - GUI (pygame): A graphical UI is available via a pygame-based frontend for interactive use; run
packer --gui - TUI (Textual): A terminal UI (TUI) built with Textual is included for rich, keyboard-driven workflows; just run
packer
Demos
TUI release Demo- Watch on youtubeCLI setup demo- Watch on youtubeCLI change demo- Watch on youtube
Configuration
Settings
See docs/SETTINGS.md for global Packer settings and docs/PROJECT.md for project-specific settings. For CLI options, see docs/CLI.md.
Setup
When you create a new project profile, Packer will guide you through a short setup flow. It is not just a folder creation step; it also creates a saved project entry so later releases can be run without re-entering all credentials.
Typical profile setup asks for:
- Program name: must be a valid Python-style identifier (letters, numbers, underscores, no spaces, no leading numbers)
- Project directory: where the project should live; defaults to a folder under your Documents directory using the program name
- GitHub access: either a GitHub personal access token or a repository URL in
username/repoform - Author name: used for project metadata
- Optional extras: GoFile code, license type, whether to use GitHub PAT authentication, and whether to include PyInstaller build support
After the initial project scaffold is created, Packer will also prompt for the sensitive release credentials it needs to actually publish or update your project:
- GoFile user token and optional folder ID
- GitHub repo token
- PyPI API token
- Optional project settings such as compile command, before/after commands, and the Ollama model name for AI-generated release text
The profile is saved to your local config directory (typically under your OS user config folder, such as ~/.config/packer/projects.json) unless you choose to encrypt it. If you encrypt the file, you will be asked to create a password.
A minimal project should look like this:
my-project/
├── src/
│ └── my_project/
├── assets/
│ ├── version.json
│ ├── integrity.json
│ └── RELEASE.md # optional template used at runtime; not a normal project file you should keep in source control
├── CHANGELOG.md
├── README.md
└── pyproject.toml
Note:
RELEASE.mdis not a regular project artifact that should be committed to your repo. It is a template with placeholders that Packer fills in at runtime when preparing GitHub release notes. The important project files are usually the source tree,assets/version.json,assets/integrity.json, and your changelog.
Tip: if the project is already a git repo and you want to release a version, make sure the repository is clean enough for Packer to detect the changelog and build steps correctly.
Warning
- Possible problems might arise in that case, please back up your project before running for the first time and even if packer messed up, it won't destroy or corrupt your project so GL fixing it! Here is also a guide for manually reverting a release in case it fails catastrophically: docs/MANUAL_REVERT.md.
- Note that automatic error reporting is enabled by default. You can disable it in the settings
Features
- Archive Creation: Packages your program with customizable exclusion rules. Uses
.gitignore - Cloud Upload: Uploads archives to GoFile with optional folder management.
- Git Integration: Handles repository updates and tagging.
- GitHub Releases: Publishes releases with AI-generated titles and descriptions.
- Optional Compilation: Supports Nuitka for compiled distributions.
- Error Handling: Automatic rollback to previous version if a step fails.
- AI-Powered: Uses Ollama (when available) to generate release notes.
- PyPI integration: builds python wheels and uploads them to PyPI.
Feedback and Suggestions
Please open issues or pull requests on the project's GitHub repository, or email [emilspro888@gmail.com] to suggest improvements or report bugs.
Changelog
See the full history in CHANGELOG.md.
In future updates
See planned features and roadmap in docs/ROADMAP.md.
Metadata
Release files for packer-release 0.24.0.post1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| packer_release-0.24.0.post1.tar.gz | 529.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| packer_release-0.24.0.post1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / packer_release-0.24.0.post1.tar.gz
| Download URL | packer_release-0.24.0.post1.tar.gz |
|---|---|
| Size | 529.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
71e81b5fd5a282ff8e6ab2b4d48ee64fde12e2702801580309a357083619eb71
|
|
BLAKE2b-256 checksum How to use checksums |
82cf2c2df11e149f9433ca760c1d03bee3405a7b2429f54473e1fc9ceb95b558
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency logRelease files / packer_release-0.24.0.post1-py3-none-any.whl
| Download URL | packer_release-0.24.0.post1-py3-none-any.whl |
|---|---|
| Size | 527.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
26c7ba387b3f63eeb31921581f13efe5e6004a45487d746f38eb35b82da9854a
|
|
BLAKE2b-256 checksum How to use checksums |
94a0a5cc89d08ac5521c24257f838c73cb2fef705fe96fb8ac10c21656f9afc4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 15, 2026.
Transparency log