| Crates.io | ppmm |
| lib.rs | ppmm |
| version | 1.1.5 |
| created_at | 2026-01-08 13:31:56.76313+00 |
| updated_at | 2026-01-08 17:12:25.206371+00 |
| description | PPM is a project manager for Python |
| homepage | https://github.com/Sumangal44/ppmm |
| repository | https://github.com/Sumangal44/ppmm |
| max_upload_size | |
| id | 2030230 |
| size | 154,756 |
A fast, efficient command-line tool to create, manage, and deploy Python projects. Written in Rust with cross-platform support for Windows, macOS, and Linux.
✨ Core Features:
ppmm new my-project
cd my-project
ppmm start
cd existing-project
ppmm init
ppmm add numpy pandas
ppmm start
ppmm add requests flask
ppmm add beautifulsoup4==4.9.0
ppmm start
ppmm run test
ppmm run build
Install directly from crates.io:
cargo install ppmm
# Coming soon - waiting for tap creation
brew tap Sumangal44/ppmm
brew install ppmm
# Coming soon - waiting for bucket submission
scoop bucket add ppmm https://github.com/Sumangal44/ppmm
scoop install ppmm
Download pre-built binaries from GitHub Releases:
Linux/macOS:
# Download and extract
curl -L https://github.com/Sumangal44/ppmm/releases/latest/download/ppmm-linux-x64.tar.gz | tar xz
sudo mv ppmm /usr/local/bin/
ppmm --version
Windows:
# Download from releases page and add to PATH
# Or use the installer executable
From the repository root run:
git clone https://github.com/Sumangal44/ppmm.git
cd ppmm
bash install.sh
This uses install.sh to check prerequisites, build, and place ppmm in /usr/local/bin (prompts for sudo if needed).
bash <(curl -s https://raw.githubusercontent.com/Sumangal44/ppmm/master/quick-install.sh)
Or run locally: bash quick-install.sh after cloning. Script lives at quick-install.sh.
Requirements: Rust 1.60+, Python 3.7+, Git.
git clone https://github.com/Sumangal44/ppmm.git
cd ppmm
cargo build --release
# Linux/macOS
sudo cp target/release/ppmm /usr/local/bin/
# Windows (PowerShell/CMD)
copy target\release\ppmm.exe C:\\Windows\\System32\\ # or add target\release to PATH
ppmm --version
Binary output: target/release/ppmm (or ppmm.exe on Windows).
ppmm new <NAME>Create a new Python project with scaffolding.
Options:
-v, --version <VERSION> - Project version (default: 0.1.0)-d, --description <DESC> - Project description-g, --git - Initialize git repository-e, --no-venv - Skip virtual environment creationExamples:
# Create basic project
ppmm new my-project
# Create with metadata and git
ppmm new my-project -v 1.0.0 -d "My awesome project" -g
# Create without venv
ppmm new my-project --no-venv
ppmm initInitialize a Python project in the current directory.
Options:
ppmm newExamples:
# Initialize in current directory
ppmm init
# Initialize with git
ppmm init -g
ppmm add <PACKAGES>Add one or more packages to the project.
Features:
package==1.2.3)project.toml automaticallyExamples:
# Add multiple packages
ppmm add requests flask numpy
# Add specific versions
ppmm add django==3.2.0 pillow==9.0.0
# Mix and match
ppmm add requests flask==2.0.0 numpy
ppmm rm <PACKAGES>Remove packages from the project and environment.
Features:
project.tomlExamples:
ppmm rm requests
ppmm rm flask numpy pandas
ppmm updateUpdate all packages to their latest versions from PyPI.
Features:
Examples:
ppmm update
ppmm run <SCRIPT-NAME>Execute a custom script defined in project.toml.
Features:
Examples:
ppmm run test
ppmm run build
ppmm run dev
ppmm buildRun the build script defined in the [scripts] section of project.toml.
Features:
cmd on Windows, sh -c on Linux/macOS)scripts.build is not definedExamples:
# Ensure project.toml contains:
# [scripts]
# build = "python setup.py build"
ppmm build
ppmm bump <TYPE>Automatically bump the project version following semantic versioning.
Arguments:
major - Increment major version (1.0.0 → 2.0.0)minor - Increment minor version (1.0.0 → 1.1.0)patch - Increment patch version (1.0.0 → 1.0.1)Features:
Examples:
# Bump patch version
ppmm bump patch
# Bump minor version
ppmm bump minor
# Bump major version
ppmm bump major
ppmm infoDisplay comprehensive project information.
Shows:
Example Output:
Python: 3.9.0
Project: my-project
Version: 1.0.0
Description: An awesome project
-- 4 Scripts --
test: python -m pytest tests/
build: python setup.py build
dev: python -m flask run
upgrade: python -m pip install --upgrade pip
-- 5 Packages --
flask==2.1.0
numpy==1.21.0
pandas==1.3.0
requests==2.26.0
pytest==6.2.0
ppmm genGenerate a requirements.txt file from project.toml.
Features:
Examples:
ppmm gen
# Equivalent to: pip freeze > requirements.txt
ppmm installInstall all packages from project.toml.
Features:
Options:
-r, --requirements <FILE> - Install from requirements.txt insteadExamples:
# Install from project.toml
ppmm install
# Install from requirements.txt
ppmm install -r requirements.txt
ppmm install --requirements /path/to/reqs.txt
project.toml FormatPPM uses TOML for project configuration. Here's the complete format:
[project]
name = "my-project"
version = "1.0.0"
description = "An awesome Python project"
main_script = "./src/main.py"
[packages]
# Production dependencies
requests = "2.28.0"
flask = "2.1.0"
numpy = "1.21.0"
[scripts]
# Custom scripts
test = "python -m pytest tests/ -v"
lint = "python -m pylint src/"
format = "python -m black src/"
build = "python setup.py build"
dev = "python -m flask run --debug"
upgrade-pip = "python -m pip install --upgrade pip"
| Field | Type | Required | Description |
|---|---|---|---|
project.name |
String | Yes | Project name |
project.version |
String | Yes | Project version (semver) |
project.description |
String | No | Project description |
project.main_script |
String | Yes | Entry point script |
packages.<name> |
String | No | Package with version |
scripts.<name> |
String | No | Command to execute |
PPM creates the following structure for new projects:
my-project/
├── project.toml # Project configuration
├── requirements.txt # Auto-generated dependencies
├── venv/ # Virtual environment
│ ├── bin/ # Executables (Linux/macOS)
│ ├── Scripts/ # Executables (Windows)
│ └── lib/ # Installed packages
├── src/
│ └── main.py # Entry point
└── .gitignore # Git ignore (if -g flag used)
# Create project
ppmm new api-server -v 1.0.0 -d "REST API server" -g
# Add dependencies
ppmm add flask flask-cors flask-sqlalchemy
# Create scripts
# Edit project.toml to add:
# [scripts]
# dev = "python -m flask run"
# prod = "gunicorn main:app"
# Start development
ppmm start
# Create project
ppmm new data-analysis -d "Data analysis project"
# Add data science packages
ppmm add pandas numpy scipy matplotlib scikit-learn jupyter
# Generate requirements for sharing
ppmm gen
# Update all packages
ppmm update
# Convert existing project
cd my-existing-project
ppmm init -g
# Install from existing requirements
ppmm install -r requirements.txt
# Generate new project config
ppmm gen
PPM is fully cross-platform and tested on:
.exe extensions handled automaticallybin/ for venvbin/ for venvThe tool automatically detects your platform and uses the correct paths and commands.
| Platform | Python Path | Pip Path |
|---|---|---|
| Windows | ./venv/Scripts/python.exe |
./venv/Scripts/pip.exe |
| Linux/macOS | ./venv/bin/python |
./venv/bin/pip |
# Install Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Install Python 3.7+
# From: https://www.python.org/downloads/
git clone https://github.com/Sumangal44/ppmm
cd ppmm
# Build debug version
cargo build
# Build optimized release version
cargo build --release
# Run tests
cargo test
# Run clippy linter
cargo clippy
Binary location: target/release/ppmm (or ppm.exe on Windows)
# Run directly from source
cargo run -- new my-project
# Debug mode with verbose output
RUST_LOG=debug cargo run -- new my-project
# Watch mode (requires cargo-watch)
cargo watch -x build
Problem: "Virtual Environment Not Found"
Solutions:
ppmm new my-project (auto-creates)python -m venv venv--no-venv flag if intentionalProblem: "Package 'X' failed to install"
Solutions:
pip search <package>pip --versionppmm run upgrade-pipProblem: "python command not found"
Solutions:
Windows:
project.toml (scripts: "python -m pytest tests/")Linux/macOS:
chmod +x venv/bin/pythonContributions are welcome! Please:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
sumangal44 - Original Creator
Based on the PPM concept for streamlined Python project management.
For issues, questions, or suggestions:
ppmm build command for project buildsppmm bump command for semantic versioning (major, minor, patch)Made with ❤️ in Rust