Skip to main content

An npm-like package manager for Python that uses pip under the hood

Project description

pynpm — An npm-like Package Manager for Python

pynpm is a Python package manager inspired by npm. It uses pip under the hood but gives you clean dependency management with package.yml and package-lock.yml, automatic virtual environment handling, and no unnecessary transitive dependencies polluting your project.

Features

  • pynpm init — Initialize a project with package.yml and .venv (like npm init)
  • pynpm install <pkg> — Install a package and save it to package.yml (like npm install)
  • pynpm install — Install all dependencies from package.yml / lockfile (like npm install)
  • pynpm uninstall <pkg> — Remove a package and clean up orphaned transitive deps
  • pynpm list — Show project dependencies and their installed versions
  • pynpm run <script> — Run scripts defined in package.yml (like npm run)
  • Automatic .venv — Creates and uses a virtual environment automatically
  • Lockfilepackage-lock.yml locks exact versions for reproducible installs
  • Orphan cleanup — Uninstalling a package also removes its unused transitive dependencies

Installation

pip install pynpm-cli

Quick Start

# Create a new project
mkdir my-project && cd my-project
pynpm init

# Install packages
pynpm install requests
pynpm install flask

# Install dev dependencies
pynpm install -D pytest

# Install all deps from package.yml (like npm install)
pynpm install

# Run a script
pynpm run test

# Remove a package
pynpm uninstall flask

# List dependencies
pynpm list

package.yml

Your project configuration lives in package.yml:

name: my-project
version: 1.0.0
description: My awesome project
author: Your Name
license: MIT
python: ">=3.8"

scripts:
  start: python main.py
  test: pytest

dependencies:
  requests: "==2.31.0"
  flask: "==3.0.0"

dev_dependencies:
  pytest: "==8.0.0"

package-lock.yml

The lockfile captures the exact versions of all installed packages (including transitive dependencies) for reproducible installs:

lockfile_version: 1
packages:
  requests:
    version: "2.31.0"
  urllib3:
    version: "2.1.0"
  charset-normalizer:
    version: "3.3.2"

Command Aliases

Full Command Alias
pynpm install pynpm i
pynpm uninstall pynpm rm

How It Works

  1. pynpm init creates package.yml, .venv, and .gitignore
  2. pynpm install <pkg> installs into .venv via pip, records the direct dependency in package.yml, and snapshots all installed versions into package-lock.yml
  3. pynpm uninstall <pkg> removes the package, cleans up orphaned transitive deps, and updates both config files
  4. pynpm install (no args) reads package-lock.yml for exact versions, or falls back to package.yml version specs

Publishing to PyPI

This project uses GitHub Actions with PyPI trusted publishing. To publish:

  1. Configure trusted publishing on PyPI for your repository
  2. Create a GitHub release — the workflow builds and publishes automatically

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pynpm_cli-0.1.1.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pynpm_cli-0.1.1-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file pynpm_cli-0.1.1.tar.gz.

File metadata

  • Download URL: pynpm_cli-0.1.1.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pynpm_cli-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b0f854b5d3d76818a866fed7b5a76b1a6e4ec27cdfc706757516c1373927ffb1
MD5 2a9811fb654b68b1e9ded9fac985ac26
BLAKE2b-256 77f935b5881a2c5252d0824d9516a2dbbef278e97938ab62c7f0ee4eae8e566b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynpm_cli-0.1.1.tar.gz:

Publisher: publish.yml on subh-skd/pynpm-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pynpm_cli-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pynpm_cli-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 9.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pynpm_cli-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 368182507da7d6def8e1990d3bb867a298b4b21bc644f7958cbf24bf7b979f92
MD5 38af09d182597aba4ff3cc9e27a99d67
BLAKE2b-256 4cc5ee2efa117efea035e1ae6f5605f84f0a0ad28378acb5b27020ba6f78b5cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynpm_cli-0.1.1-py3-none-any.whl:

Publisher: publish.yml on subh-skd/pynpm-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page