Search code examples
pythonpip

Install a package and write to requirements.txt with pip


I'm searching for a way to install a package with pip, and write that package's version information to my project's requirements.txt file. For those familiar with npm, it's essentially what npm install --save does.

Using pip freeze > requirements.txt works great, but I've found that I forget to run this, or I can accidentally include unused packages that I'd installed for testing but decided not to use.

So the following psuedocode:

$ pip install nose2 --save

Would result in a requirements.txt file with:

nose2==0.4.7

I guess I could munge the output of save to grab the version numbers, but I am hoping there is an easier way.


Solution

  • To get the version information, you can actually use pip freeze selectively after install. Here is a function that should do what you are asking for:

    pip_install_save() {
        package_name=$1
        requirements_file=$2
        if [[ -z $requirements_file ]]
        then
            requirements_file='./requirements.txt'
        fi
        pip install $package_name && pip freeze | grep -i $package_name >> $requirements_file
    }
    

    Note the -i to the grep command. Pip isn't case sensitive with package names, so you will probably want that.