Giter VIP home page Giter VIP logo

pigar's Introduction

pigar

  • Generating requirements.txt for Python project.
    • Handling the difference between different Python versions.
    • Jupyter notebook (*.ipynb) support.
    • Including the import statements from exec/eval, doctest of docstring, etc.
  • Searching packages by import name.
  • Checking the latest versions for Python project.

NOTE: Pipenv or other tools is recommended for improving your development flow.

Installation

pigar can run on Python 2.7.+ and 3.2+.

To install it with pip, use:

[sudo] pip install pigar

To install it with conda, use:

conda install -c conda-forge pigar

To get the newest code from GitHub:

pip install git+https://github.com/damnever/pigar.git@[master or other branch] --upgrade

Usage

  • pigar can consider all kinds of complicated situations. For example, this project has py2_requirements.txt and py3_requirements.txt for different Python versions(see the above GIF).

    # Generate requirements.txt for current directory.
    $ pigar
    
    # Generating requirements.txt for given directory in given file.
    $ pigar -p ../dev-requirements.txt -P ../
    

    pigar can list all files which referenced the package(the line numbers for Jupyter notebook may be a bit confusing), for example:

    # project/foo.py: 2,3
    # project/bar/baz.py: 2,7,8,9
    foobar == 3.3.3
    

    If the requirements.txt is overwritten, pigar will show the difference between the old and the new.

  • If you do not know the import name that belongs to a specific package (more generally, does Import Error: xxx drive you crazy?), such as bs4 which may come from beautifulsoup4 or MySQLdb which could come from MySQL_Python, try searching for it:

    $ pigar -s bs4 MySQLdb
    
  • Checking for the latest version:

    # Specify a requirements file.
    $ pigar -c ./requirements.txt
    
    # Or, you can let pigar searching all *requirements.txt in the current directory
    # level by itself. If not found, pigar will generate a new requirements.txt
    # for the current project, then check for the latest versions.
    $ pigar -c
    
  • More:

    pigar --help
    

FAQ

(1) Why `pigar` generates multiple packages for same import name?

(2) Why pigar generates different packages for same import name in different environment?

pigar can not handle it gracefully, you may need to remove the duplicate packages in requirements.txt manually. Install the required package(remove others) in local environment should fix it as well.

Related issues: #32, #68, #75.

More

pigar does not use regular expressions in such a violent way. Instead, it uses AST, which is a better method for extracting imported names from arguments of exec/eval, doctest of docstring, etc.

Also, pigar can detect the difference between different Python versions. For example, you can find concurrent.futures from the Python 3.2 standard library, but you will need install futures in earlier versions of Python to get concurrent.futures, this is not a hardcode.

If you have any issues or suggestions, please submit an issue on GitHub. All contributions are appreciated!

LICENSE

The BSD 3-Clause License

pigar's People

Contributors

bganglia avatar damnever avatar felixonmars avatar flyingfisch avatar jakirkham avatar lilydjwg avatar roryokane avatar smartmanoj avatar spacewander avatar taranjeet avatar timgates42 avatar worldofthecell avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.