Metadata-Version: 2.1
Name: rqmts
Version: 2.0.3
Summary: Generates pip requirements.txt file for any project by analysing package imports
Home-page: https://github.com/0x48piraj/rqmts
Author: Piyush Raj <0x48piraj>
Author-email: piyush@linuxmail.org
License: BSD-3
Platform: UNKNOWN
Classifier: License :: OSI Approved :: BSD License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown

# Rqmts

[![PyPI Download/Month](https://img.shields.io/pypi/dm/rqmts.svg)](https://pypi.python.org/pypi/rqmts/)
[![PyPI Version](https://img.shields.io/pypi/v/rqmts.svg)](https://pypi.python.org/pypi/rqmts/)
[![PyPI license](https://img.shields.io/pypi/l/rqmts.svg)](https://pypi.python.org/pypi/rqmts/)
[![PyPI pyversions](https://img.shields.io/pypi/pyversions/rqmts.svg)](https://pypi.python.org/pypi/rqmts/)
[![PyPI implementation](https://img.shields.io/pypi/implementation/rqmts.svg)](https://pypi.python.org/pypi/rqmts/)

<p align="center">
<b>Rqmts - Generate requirements.txt file for any project by analysing package imports</b><br><br>
    <img alt="Rqmts logo" src="https://i.imgur.com/czbQOUj.png" width="400"><br>
<b>Click <a href="#Usage">here</a> to see the demo.<br>
  Click <a href="https://github.com/0x48piraj/rqmts/wiki">here</a> for documentation.<br><br></b>
</p>

## About the project

**Rqmts** is a fantastic stand-alone tool which generates `requirements.txt` file for any project by analysing package imports.

It does not requires any dependency (works out-of-the-box), not needs internet to work _(is completely offline, upto this moment)_, nor uses regular expressions in such a violent way as existing projects do. Instead, it uses simple heuristic techniques and parse conditional trees, which is a better method for extracting imported names from statements, functions, etc.

## Why this project

### Questions

- **Why not just use pip's freeze command** to generate a `requirements.txt` file for my project?
- Why to **re-invent the wheel** when there are modules such as **pipreqs**, **pigar**, **poetry** already present?
- Why not manually?

### Answers

* **Why not just pip freeze?**
   * ``pip freeze`` only saves the packages that are installed with ``pip install`` in your environment. 
   * ``pip freeze`` saves all packages in the environment including those that you don't use in your current project. _(if you don't have virtualenv)_
* Why **re-invent the wheel** (?)
   * **pipreqs** fails on many occasions _(see - [pipreqs/issues](https://github.com/bndr/pipreqs/issues))_
   * **pigar** queries pypi servers, big no-no. Ideally, it should be local, on fallback? then maybe. Other than that, **pigar** recommends using Pipenv ([pipenv has serious issues](https://news.ycombinator.com/item?id=18612590))
   * **poetry** quotes "Be aware, however, that it will also install poetry's dependencies which might cause conflicts."
   * Sheer curiousity. _"can I create a project that has potential of collecting thosands of stars and most importantly, hundreds of contributors?"_
* Manually?
   * _Are you serious right now?_

## Installation


Use **pip** to install [rqmts](https://pypi.org/project/rqmts/). This is the **recommended way of running Rqmts**.

![Installation Guide](https://github.com/0x48piraj/rqmts/raw/master/static/installation-guide.gif)

**Rqmts** also provides a script that will run a **rqmts instance** isolated from the rest of your system by using file-less/memory-based execution.

```
curl -sSL https://raw.githubusercontent.com/0x48piraj/rqmts/master/Rqmts.py | python
```

Alternatively, you can download `Rqmts.py` from the root directory and execute it separately.

## Usage

#### Command-line Interface and Interactive mode

![Usage Demo](https://github.com/0x48piraj/rqmts/raw/master/static/usage-demo.gif)

#### Challenges

The major challenge of this project is to extract the required metadata from modules which are first extracted from the input script.

- **Version numbers in python can be in very different places depending on the case**
- **Package name in the package index is independent of the module name we import**

and these quirks make this project interesting. There's a funny comment in the source which reflects the diversity between us and it goes like :

```py
# module_name.__version__ sucks, because we suck (PEP 0396)
```

This project aims to combine the best existing strategies to cover the broadest possible set of cases _(if not all)_. The project was built keeping in mind the modular programming paradigms and so other than being readable it's easily extensible making it possible to add new strategies/algorithms quickly.

## Changelog

Playing with different versions? Read the **[Changelog](CHANGELOG.md)**.

## Contribute

All patches are Welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for further details. For discussions, create a [new issue](https://github.com/0x48piraj/rqmts/issues/new) or ping me over [Twitter](https://twitter.com/0x48piraj)

Again, if you have any issues or suggestions/patches, please do not hesitate to **[open an issue](https://github.com/0x48piraj/rqmts/issues/new)** or a **[pull request](https://github.com/0x48piraj/rqmts/pulls)**!

## Running the tests

This project uses [unittest](https://docs.python.org/2/library/unittest.html).

> The Python unit testing framework, sometimes referred to as "PyUnit," is a Python language version of JUnit, by Kent Beck and Erich Gamma. JUnit is, in turn, a Java version of Kentâ€™s Smalltalk testing framework. Each is the de facto standard unit testing framework for its respective language.

You may need to install the package (rqmts) for setup beforehand, using

```
pip install --user rqmts
```

All tests are encapsulated in one single script named `testsuite.py` and all the respective test-cases are under `tests/testcases/`

For getting started,

```
python tests/testsuite.py
```

## License

This software is licensed under **BSD 3-Clause "New" or "Revised" License**. To view a copy of this license, visit **[BSD 3-Clause](LICENSE)**.

