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.3.tar.gz (11.5 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.3-py3-none-any.whl (10.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pynpm_cli-0.1.3.tar.gz
  • Upload date:
  • Size: 11.5 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.3.tar.gz
Algorithm Hash digest
SHA256 89d13ed3887223e87684c0def6e24f7caa9e15e37b4880d5ed32d3ccc2a802ae
MD5 173051fae87d37a777e67129a12a41de
BLAKE2b-256 9bd84fa4dc7e02f41e55391ad038ca0e8ed659d8f592cd37286a6a2cf44fa02b

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynpm_cli-0.1.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: pynpm_cli-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 10.8 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e29f8c32d8da01ac10be3462c9871bfc07841dcd8bd521a6e2b3ea48ca4185fb
MD5 a3f8f02afe9a658049b6733d4498df1b
BLAKE2b-256 6b5ac99106651f98d6a8a7b2aba1c385c7142c9ff0fdde9178361eb96d630bf6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pynpm_cli-0.1.3-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