275

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

如何在 Python 包管理器中实现相同的功能pip?我想将包名称及其版本保存到,比如说,requirements.pip在使用类似pip install package --save-dev requirements.pip.

4

9 回答 9

212

没有与 的等价物pip

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

您可以在他们的文档页面上看到所有可用的选项。

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

编辑 1

自撰写本文以来,在提供--save-dev类似于 NPM 的自动选项方面没有任何变化,但是 Kenneth Reitz(requests以及更多作者)发布了一些关于更好的 pip 工作流以更好地处理pip更新的更多信息。

编辑 2

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

安装pipenv(在 Mac 上)

brew install pipenv

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

pipenv --three install

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

pipenv shell

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

pipenv install <package>

也可以更新过期的包

pipenv update

我强烈建议检查一下,特别是如果来自npm背景,因为它与package.jsonpackage-lock.json

于 2013-10-02T12:20:04.353 回答
65

这条简单的线是一个起点。您可以轻松地构建一个 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
于 2018-03-03T00:31:20.450 回答
7

我创建了包裹实际pip称为pipm的 python 包。所有pip命令都将按原样工作,而且它们将反映在需求文件中。与我发现但无法使用的类似工具pip-savehttps://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

于 2017-10-13T08:15:23.853 回答
4

更新:显然,pipenv 没有得到 Python 维护者的正式认可,并且之前链接的页面由不同的组织拥有。该工具有其优点和缺点,但下面的解决方案仍然达到了 OP 正在寻求的结果。

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

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

$ pipenv install <package>

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

APipfile是 的直接等价物package.json,而Pipfile.lock对应于package-lock.json

于 2018-06-25T20:25:41.647 回答
3

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

于 2018-06-06T15:11:38.717 回答
3

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

于 2017-01-17T11:29:43.263 回答
2

如何制作一个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您的当前目录中。

于 2017-09-29T07:31:50.147 回答
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

希望这可以帮助。

于 2015-11-16T06:49:58.313 回答
0

这个如何:

pip freeze >> requirements.txt
于 2021-12-23T10:20:48.567 回答