Skip to content

Building from Source

FreakySneaky edited this page Oct 13, 2026 · 3 revisions

Building from Source

Simple Organizer uses only the Python standard library.

Requirements

  • Python 3.11 or newer with Tkinter
    • Fedora / Bazzite: sudo dnf install python3-tkinter
    • Debian / Ubuntu: sudo apt install python3-tk
    • Windows: the python.org installer includes Tkinter
  • Optional: tkinterdnd2 for drag-and-drop of folders onto the path field

Run from source

git clone https://github.com/FreakySneaky787/Simple-Organizer.git
cd Simple-Organizer
python3 main.py          # Windows: py main.py

Build a standalone exe / binary

python3 -m venv .venv
source .venv/bin/activate         # Linux
# .venv\Scripts\activate          # Windows

pip install pyinstaller

Linux:

pyinstaller --onefile --windowed --name simple_organizer \
    --add-data "icon.png:." main.py

Windows:

py -m PyInstaller --onefile --windowed --name simple_organizer ^
    --add-data "icon.png;." --icon icon.ico main.py

The result is in dist/. icon.png and icon.ico are part of the repository; without them the app still works and draws its own window icon.

Debian package

python3 packaging/build_deb.py        # -> dist/simple-organizer_<version>_all.deb

Pure Python, so it also works on Windows. packaging/test_deb.sh checks the package in a clean Debian 12 (lintian, install, start on a virtual screen, scan / organize / undo / trash, removal); GitHub Actions runs it on every push and attaches the package to every release:

docker run --rm -v "$PWD:/src" -w /src debian:bookworm sh packaging/test_deb.sh dist/simple-organizer_*_all.deb

Tests

The regression tests of every release are in tests/ — core suites without a window and GUI suites that drive the real app. They use temporary folders and a temporary APPDATA only:

py tests\run_all.py

They are written for Windows. GitHub Actions runs them on every push with Python 3.11 and the newest Python.

Drag and drop

Dropping a folder (or a file, to use its folder) onto the path field needs the Tcl extension tkdnd. The easiest way is pip install tkinterdnd2, which bundles it. Without it, the feature is simply off and the tooltip does not mention it.

Project structure

File Contents
main.py Window, dialogs, background tasks, scheduler integration
organizer.py Scanning, organising, undo history, staging, duplicates, trash
utils.py Categories, file-type detection, safe file moves, data folders, instance lock, error log
rules.py Rules: storage, validation, matching
config.py Settings: defaults, loading with validation, saving
scheduler.py Interval timer for Auto-organize
theme.py Light / dark theme, rounded controls drawn at runtime
icons.py Phosphor icons (MIT) rendered at runtime

Contributing

Bug reports and ideas are welcome as issues. For bugs, please attach error.log (see Data and Settings).

Clone this wiki locally