Skip to main content

Wrapper around pip commands to auto-update requirements file

Project description

# pipm

Python package management workflow using pip, requirements file & setup.cfg as its metadata.
(For the time being and old world of python)

# Installation

- Adviced to install only inside virtualenv as this will replace pip executable

Install from PyPI

```
pip install six
pip install pipm
```

Or Install directly from the GitHub

```commandline
pip install -e git://github.com/jnoortheen/pipm.git@master#egg=pipm
```

**Note:**
- This tool manipulates all your requirements file. So be sure to use version control software or take backup of your files to keep track of changes.

# Quickstart

Both `pip` and `pipm` command will work as the same. Create an alias as `alias pip=pipm` and you are good to go.

### install all your dependencies from the requirements file

- to install only from `requirements.txt`

```pipm install```

- to install from all `*requirements*.txt`

```pipm install --all```

### installation
```pipm install pkg-name``` or
```pip install pkg-name```

### installation as development dependency
```pipm install pkg-name --dev```


### installation as testing dependency
```pipm install pkg-name --test```

### removal
```pipm uninstall pkg-name```

### update all your dependencies
```pipm update```

### including development dependencies
```pipm install --dev```


# Usage

1. install
- a wrapper around standard `pip install` command and accepts all the standard options

Below are the things that `pipm` brings to the table

1. Extra functionality
- when package names are given it will be saved to the requirements.txt file in the current directory.
If you have `requirements` directory structure with `base.txt` inside then that file will be used. Otherwise it
will create one in the current directory.
- when no package name is given then it is equivalent to `-r requirements.txt` and it will install all requirements
from the current directory
1. Additional options:
the below saves to file when package name given otherwise equivalent to passing requirements file name.
1. `--dev` - saves to development requirements
1. `--prod` - saves to production requirements
1. `--test` - saves to testing requirements
1. `--env <name>` - if you have any special set of requirements that belong to a separate file you could pass the name here.
It will search for the matching one in the following pattern `<name>-requirements.txt` or
`requirements/<name>.txt` or `requirements-<name>.txt`

1. uninstall
- a wrapper around standard `pip uninstall` command
- alias `rm` is available
- when uninstalling a package, this command also checks packages that are no longer required by any of user installed
packages and removes them
- ofcourse it removes the packages from `requirements` files

1. update
- new command
- equivalent to calling `pip install` with `--upgrade` flag
- update a single package or the whole environment when no argument given.
- by default the packages are updated interactively
- set `--auto-update` to disable this

1. save/freeze
- extends the standard freeze command to save the currently installed packages


# Features

1. Just a wrapper around the standard pip's `install/uninstall` command. So all the cli options will work
2. Handles multiple `requirements` files
3. No new set of files. requirements files contain pinned dependecies and setup.cfg contain abstract dependencies.

# Development
- clone the repository and create new virtualenv

```
git clone git@github.com:jnoortheen/pipm.git
cd pipm
pew new pipm -a .
pip install -r dev-requirements.txt
```

- to test from local sources
```
pip install -e .
```

- Commit message should follow [this](https://udacity.github.io/git-styleguide/) style-guide.

# Testing

- run `invoke test` from the root directory.

# Version compatibility

the package is versioned in accordance with `pip` major version number.
`pipm-9.*` will be compatible with `pip-9` and such.

# Alternatives and their problems (IMHO)

1. [pipenv](https://docs.pipenv.org/)
- good for local development with only one virtual environment per project
- Not good when we need to deploy over production server or keep multiple virtuals-envs
- it is better to use `pew` alone instead of the shell command that comes with this
2. [pip-tools](https://github.com/jazzband/pip-tools)
- another set of files to keep track of, additional commands to remember
3. [poetry](https://github.com/sdispater/poetry)
- better than pipenv and do not interfere much in environment management with pew
- the problems I faced are related to installing dependencies in remote servers/docker environments.
As the project matures this problem might get resolved.


# TODOs:

- rm will check whether a package is present in setup.cfg
- setup.cfg will save after sorting reqs
- python 2 support

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

pipm-18.2.0.tar.gz (10.7 kB view details)

Uploaded Source

File details

Details for the file pipm-18.2.0.tar.gz.

File metadata

  • Download URL: pipm-18.2.0.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.7

File hashes

Hashes for pipm-18.2.0.tar.gz
Algorithm Hash digest
SHA256 8439e1b24e4ad0d1c11afc09be1b8647e84a0ca07efa0e98fdb172a9b7b7a06d
MD5 a3725e7a1607bd6eebc0fb2c282a2d8e
BLAKE2b-256 0b0eb09d27475a48984d4f89e4cf3755bc6373356835317cf0d66074fa5b98d2

See more details on using hashes here.

Supported by

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