什么是pip相当于`npm install package --save-dev`?

时间:2013-10-02 11:28:54

标签: python node.js pip

在nodejs中,我可以npm install package --save-dev将已安装的软件包保存到软件包中。

如何在Python包管理器pip中实现相同的功能?我想在使用requirements.pip之类的东西安装软件包之后,将软件包名称及其版本保存到pip install package --save-dev requirements.pip

8 个答案:

答案 0 :(得分:131)

没有与pip等效的内容。

最好的方法是pip install package && pip freeze > requirements.txt

您可以在documentation page上看到所有可用选项。

如果它真的让您感到困扰,那么编写一个自定义bash脚本(pips)来获取-s参数并冻结到requirements.txt文件并不会太困难。

修改1

自写这篇文章以来,提供类似于NPM的自动--save-dev选项没有任何变化,但Kenneth Reitz(requests的作者等等)发布了更多关于{{3}的信息}以更好地处理pip更新。

修改2

从上面的“更好的pip工作流程”文章链接,现在建议使用better pip workflow来管理需求和虚拟环境。最近使用了这个,我想总结一下过渡的简单性:

安装pipenv(在Mac上)

brew install pipenv

pipenv创建并管理自己的虚拟环境,因此在具有现有requirements.txt的项目中,安装所有要求(我使用Python3.7,但您可以删除--three如果你不这样做那么简单:

pipenv --three install

激活virtualenv以运行命令也很容易

pipenv shell

安装要求会自动更新PipfilePipfile.lock

pipenv install <package>

还可以更新过期的软件包

pipenv update

我强烈推荐pipenv,尤其是来自npm背景,因为它与package.jsonpackage-lock.json具有相似的感觉

答案 1 :(得分:22)

这条简单的线是一个起点。您可以轻松构建一个bash命令来重用行中的PACKAGE。

pip install PACKAGE && pip freeze | grep PACKAGE >> requirements.txt

感谢@devsnd提供简单的bash函数示例:

function pip-install-save { 
    pip install $1 && pip freeze | grep $1 >> requirements.txt
}

要使用它,只需运行:

pip-install-save some-package

答案 2 :(得分:4)

更新:显然,pipenv is not officially endorsed by Python maintainerspreviously-linked page由另一个组织拥有。该工具各有利弊,但以下解决方案仍然可以达到OP所寻求的结果。

pipenv是一个依赖管理工具,它包装了pip,并提供了您所要的内容:

https://docs.pipenv.org/basics/#example-pipenv-workflow

  

$ pipenv install <package>

     

如果不存在,则会创建一个Pipfile。如果确实存在,则会使用您提供的新软件包自动对其进行编辑。

Pipfile直接等效于package.json,而Pipfile.lock对应于package-lock.json

答案 3 :(得分:2)

我在pip上快速破解了添加--save选项以安装/卸载命令。

有关此hack的更多信息,请查看我的博客: http://blog.abhiomkar.in/2015/11/12/pip-save-npm-like-behaviour-to-pip/

安装(GitHub): https://github.com/abhiomkar/pip-save

希望这有帮助。

答案 4 :(得分:2)

我创建了python包,它包裹着名为pipm的实际pip。所有pip命令都将按原样运行,并且它们将反映在需求文件中。与pip-save(我发现并且无法使用的类似工具)不同,它可以处理许多文件和环境(测试,开发,生产等)。它还具有升级所有/任何依赖项的命令。

安装

pipm install pkg-name

作为开发依赖项安装

pipm install pkg-name --dev

安装为测试依赖

pipm install pkg-name --test

去除

pipm uninstall pkg-name

更新所有依赖项

pipm update

从需求文件

安装所有依赖项

pipm install

包括开发依赖项

pipm install --dev

答案 5 :(得分:0)

您可以手动将其保存在Makefile(或文本文件中,然后在Makefile中导入)中:


PYTHON=.venv/bin/python # path to pyphon
PIP=.venv/bin/pip # path to pip
SOURCE_VENV=. .venv/bin/activate


install:
    virtualenv .venv
    $(SOURCE_VENV) && $(PIP) install -e PACKAGE
    $(SOURCE_VENV) && $(PIP) install -r requirements.txt # other required packages

然后运行make install

答案 6 :(得分:0)

如何使用shell函数来执行此操作? 将以下代码添加到~/.profile~/.bashrc

pips() {
    local pkg=$1

    if [ -z "$1" ]; then
        echo "usage: pips <pkg name>"
        return 1
    fi

    local _ins="pip install $pkg"
    eval $_ins
    pip freeze | grep $pkg -i >> requirements.txt
}

然后运行source ~/.profilesource ~/.bashrc将其导入您当前的终端

当你想要安装&amp;&amp;保存包,只需运行,例如pips requests。 安装软件包后,其版本将保存到当前目录中的requirements.txt

答案 7 :(得分:0)

我正在使用这个小命令行安装软件包并将其版本保存在requirements.txt中: pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt