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

Posted

技术标签:

【中文标题】pip 相当于 `npm install package --save-dev` 是啥?【英文标题】:What is pip's equivalent of `npm install package --save-dev`?pip 相当于 `npm install package --save-dev` 是什么? 【发布时间】:2013-10-08 18:35:30 【问题描述】:

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

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

【问题讨论】:

pip freeze > requirements.pip 这不一样。 npm install package --save-dev 同时结合了安装和添加到 node_npm 需求文件。它更方便。使用 pip freeze 我必须执行两个命令才能完成相同的操作:1) pip install package 2) pip freeze > requirements.pip Pip 有 issue 关于 --save 选项。 如果使用 setup.py 来满足要求,我创建了一个 small module 来将您的包版本冻结到 setup.py 中。 您可以创建一个 env 并安装您的 prod 依赖项,然后将其克隆为 dev env,并安装 dev 依赖项。但是您必须手动同步它们。或者全局安装 dev 依赖项。它不能在开发者之间共享,但会被完全使用。 Node.js 在这种情况下做得更好。 【参考方案1】:

pip 没有等价物。

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

您可以在他们的documentation page 上查看所有可用选项。

如果它真的困扰你,编写一个自定义 bash 脚本 (pips) 并不会太难,它接受一个 -s 参数并自动冻结到你的 requirements.txt 文件。

编辑 1

自从写这篇文章以来,提供类似于 NPM 的自动 --save-dev 选项没有任何变化,但是 Kenneth Reitz(requests 的作者等等)已经发布了一些关于 better pip workflow 的更多信息,以便更好地处理 @987654332 @更新。

编辑 2

链接自上面的“更好的 pip 工作流程”文章,现在建议使用 pipenv 来管理需求和虚拟环境。最近经常使用这个,我想总结一下转换是多么简单:

安装pipenv(在 Mac 上)

brew install pipenv

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

pipenv --three install

激活 virtualenv 来运行命令也很简单

pipenv shell

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

pipenv install <package>

也可以更新过期的包

pipenv update

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

【讨论】:

请注意,这还将保存依赖项的依赖项,随着时间的推移可能不再需要这些依赖项,因为依赖项不再使用它。 这似乎没有解决原始问题的 --save-dev 方面,它允许您对本地开发和生产有不同的依赖关系。如何使用 pipenv 实现这一目标? @jeznag pipenv 允许您在Pipfile 中指定dev-packages 和/或从命令行使用--dev(或-d)。例如pipenv install --dev nose2【参考方案2】:

这条简单的线是一个起点。您可以轻松地构建一个 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

【讨论】:

我的五分钱P=Flask pip install $P &amp;&amp; pip freeze | grep $P &gt;&gt; requirements.txt【参考方案3】:

我创建了一个包裹实际pip 的python 包,称为pipm。所有pip 命令将按原样工作,而且它们将反映在需求文件中。不像pip-save(https://github.com/kgritesh/pip-save 5 年不活跃)我发现但无法使用的类似工具,它可以处理许多文件和环境(测试、开发、生产等)。它还具有升级所有/任何依赖项的命令。

安装

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

【讨论】:

其实,相当有趣的发展!【参考方案4】:

更新: 显然,pipenv is not officially endorsed by Python maintainers 和 previously-linked page 归另一个组织所有。该工具有其优点和缺点,但下面的解决方案仍然达到了OP正在寻求的结果。

pipenv 是一个依赖管理工具,它封装了pip,除此之外,还提供您所要求的内容:

https://pipenv.kennethreitz.org/en/latest/#example-pipenv-workflow

$ pipenv install &lt;package&gt;

如果不存在,这将创建一个 Pipfile。如果确实存在,它将自动使用您提供的新包进行编辑。

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

【讨论】:

【参考方案5】:

您可以手动将其保存在 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】:

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

【讨论】:

【参考方案7】:

我对@9​​87654323@ 做了一个快速破解,将--save 选项添加到安装/卸载命令中。

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

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

希望这会有所帮助。

【讨论】:

【参考方案8】:

如何创建一个 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 将其导入当前终端

当你想安装 && 保存一个包时,只需运行,例如pips requests。 安装包后,其版本将保存到您当前目录下的requirements.txt

【讨论】:

【参考方案9】:

这个呢:

pip freeze >> requirements.txt

【讨论】:

以上是关于pip 相当于 `npm install package --save-dev` 是啥?的主要内容,如果未能解决你的问题,请参考以下文章

npm 相当于 yarn install 和 yarn webpack:build

安装pip3 install sanic?

pip install selenium 无法安装问题解决办法

pack 方便的npm 构建工具

相当于 `pip` 的 `package.json' 和 `package-lock.json`

比较 npm pack tarball 和 NPM 上的内容