Python project requirements tool – pigar
(In the GIF, the module
urlparse has been removed in Python3,
requests has been installed in virtual environment
pigar-2.7, not in
When generating requirements for a project,
pigarcan consider all kinds of complicated situations. For example, this project has py2_requirements.txt and py3_requirements.txt for different Python versions.
# Generate requirements.txt for current directory. $ pigar # Generate requirements for given directory in given file. $ pigar -p ../dev-requirements.txt -P ../
pigarwill list all files which referenced the package, for example:
# project/foo.py: 2,3 # project/bar/baz.py: 2,7,8,9 foobar == 3.3.3
If the requirements file is overwritten,
pigarwill 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: xxxdrive you crazy?), such as
bs4which may come from
MySQLdbwhich could come from
MySQL_Python, try searching for it:
$ pigar -s bs4 MySQLdb
To check requirements for the latest version, just do:
# Specify a requirements file. $ pigar -c ./requirements.txt # Or, you can let pigar search for *requirements.txt in the current directory # level by itself. If not found, pigar will generate requirements.txt # for the current project, then check for the latest versions. $ pigar -c
pigar can run on Python 2.7.+ and 3.2+. Install it with
[sudo] pip install pigar
To get the newest code from GitHub:
pip install git+https://github.com/Damnever/pigar.git@[master or other branch] --upgrade
usage: pigar [-h] [-v] [-u] [-s NAME [NAME ...]] [-c [PATH]] [-l LOG_LEVEL] [-i DIR [DIR ...]] [-p SAVE_PATH] [-P PROJECT_PATH] Python requirements tool -- pigar, it will do only one thing at each time. Default action is generate requirements.txt in current directory. optional arguments: -h, --help show this help message and exit -v, --version show pigar version information and exit -u, --update update database, use it when pigar failed you, exit when action done -s NAME [NAME ...] search package name by import name, use it if you do not know import name come from which package, exit when action done -c [PATH] check requirements for the latest version. If file path not given, search *requirements.txt in current directory, if not found, generate file requirements.txt, exit when action done -l LOG_LEVEL show given level log messages, argument can be (ERROR, WARNING, INFO), case-insensitive -i DIR [DIR ...] given a list of directory to ignore, relative directory, *used for* -c and default action -p SAVE_PATH save requirements in given file path, *used for* default action -P PROJECT_PATH project path, which is directory, *used for* default action
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
eval, doctest of docstring, etc.
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
Finally, you already saw
Features. You can learn more from the source code.
If you have any issues or suggestions, please submit an issue on GitHub.