安装包并使用pip写入requirements.txt

时间:2013-11-15 16:37:02

标签: python pip

我正在寻找一种使用pip安装软件包的方法,并将该软件包的版本信息写入我项目的requirements.txt文件。对于那些熟悉npm的人来说,它基本上是npm install --save所做的。

使用pip freeze > requirements.txt效果很好,但我发现我忘了运行它,或者我可能会意外地包含我为测试安装但未决定使用的未使用的软件包。

所以下面的伪代码:

$ pip install nose2 --save

将导致带有:

的requirements.txt文件
nose2==0.4.7

我想我可以使用save的输出来获取版本号,但我希望有一种更简单的方法。

3 个答案:

答案 0 :(得分:13)

要获取版本信息,您可以在安装后有选择地使用pip冻结。这是一个应该满足您要求的功能:

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
}

请注意grep命令的-i。 Pip与包名称不区分大小写,因此您可能需要它。

答案 1 :(得分:5)

只需添加像

一样的smth
function pips() {
    echo $'\n'$1 >> requirements.txt; pip install $1
}

进入.bashrc或.bash_profile并使用pips命令安装包并将其名称保存到requirements.txt中 例如:

pips django-waffle

基于Akash Kothawale的评论:)

答案 2 :(得分:5)

我已经写了以下使用的bash函数;

function pip-save() {
    for pkg in $@; do
        pip install "$pkg" && {
            name="$(pip show "$pkg" | grep Name: | awk '{print $2}')";
            version="$(pip show "$pkg" | grep Version: | awk '{print $2}')";
            echo "${name}==${version}" >> requirements.txt;
        }
    done
}

这会将规范包名称保存到需求以及安装的版本中。示例用法;

$ pip-save channels asgi_redis
# will save the following to requirements.txt (as of writing):
# ---
# channels==1.0.1
# asgi-redis==1.0.0
# ---
# note how asgi_redis is translated to its canonical name `asgi-redis`