pip等同于`npm install package --save-dev`吗?


197

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

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


4
pip freeze > requirements.pip
falsetru

5
不一样 npm install package --save-dev同时将安装和添加合并到node_npm需求文件中。更方便。随着pip freeze我必须做两个命令做同样的事情:1)pip install package2)pip freeze > requirements.pip
hllau

1
点子有关于选项的问题--save
rutsky

如果使用setup.py满足要求,我已经创建了一个小模块,将您的软件包版本冻结到setup.py中。
AdamGold19年

Answers:


162

没有与的等效项pip

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

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

如果确实让您感到困扰,那么编写一个自定义bash脚本(pips)会很困难,该脚本带有一个-s参数并requirements.txt自动冻结到您的文件中。

编辑1

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

编辑2

从上面的“更好的点子工作流程”文章链接到现在,建议将其用于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

我强烈建议您进行检查,尤其是来自npm背景时,因为它的感觉package.jsonpackage-lock.json


22
请注意,这还将保存依赖关系的依赖关系,因为随着时间的推移,不再需要依赖关系,因为依赖关系已不再使用它。
Patrick Bassut 2015年

这似乎没有解决原始问题的--save-dev方面,该问题使您可以对本地开发和生产有不同的依赖关系。您如何使用pipenv实现这一目标?
jeznag

1
@jeznag pipenv允许你指定一个dev-packages在你Pipfile和/或使用--dev(或-d命令行)。例如pipenv install --dev nose2
Ewan

39

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

我的5美分P=Flask pip install $P && pip freeze | grep $P >> requirements.txt
GBrian

4

我创建Python包,各地的实际包装pip称为PIPM。所有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


3

更新:显然,pipenv没有得到Python维护者的正式认可,并且以前链接的页面是由另一个组织拥有的。该工具各有利弊,但以下解决方案仍然可以达到OP所寻求的结果。

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

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

$ pipenv install <package>

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

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



1

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


我完全同意这种方法。
eleijonmarck


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将其导入到当前终端

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.