在nodejs中,我可以执行npm install package --save-dev来将已安装的包保存到包中。
npm install package --save-dev
如何在Python包管理器pip中实现同样的事情?我想在使用类似pip install package --save-dev requirements.pip的东西安装包之后,将包的名称及其版本保存到requirements.pip中。
pip
pip install package --save-dev requirements.pip
requirements.pip
pip没有等价的。
最好的方法是pip install package && pip freeze > requirements.txt
pip install package && pip freeze > requirements.txt
你可以在他们的文档页面上看到所有可用的选项。
如果这真的困扰你,编写一个自定义bash脚本(pips)并不太难,它接受一个-s参数并自动冻结到你的requirements.txt文件。
pips
-s
requirements.txt
编辑1
自写这篇文章以来,在提供类似于NPM的自动--save-dev选项方面没有任何变化,但是Kenneth Reitz (requests和其他许多文章的作者)发布了一些关于更好的PIP工作流的更多信息,以更好地处理pip更新。
--save-dev
requests
编辑2
链接自“更好的pip工作流程”;现在建议使用pipenv来管理需求和虚拟环境。最近我经常用这个词,我想总结一下这个转变是多么简单:
pipenv
安装pipenv (Mac)
brew install pipenv
pipenv创建并管理它自己的虚拟环境,因此在一个已有requirements.txt的项目中,安装所有需求(我使用Python3.7,但如果你不这样做,你可以删除--three)非常简单:
--three
pipenv --three install
激活virtualenv来运行命令也很容易
pipenv shell
安装需求将自动更新Pipfile和Pipfile.lock . conf
Pipfile
Pipfile.lock
pipenv install <package>
也可以更新过期的包
pipenv update
我强烈推荐检查一下,特别是来自npm背景的人,因为它与package.json和package-lock.json有相似的感觉
npm
package.json
package-lock.json
我在pip上做了一个快速的hack,添加了--save选项来安装/卸载命令。
--save
请看看我的博客关于这个黑客的更多信息: http://blog.abhiomkar.in/2015/11/12/pip-save-npm-like-behaviour-to-pip/ < / p > < p >安装(GitHub): https://github.com/abhiomkar/pip-save < / p >
希望这能有所帮助。
你可以手动将它保存在Makefile中(或一个文本文件,然后导入到你的Makefile中):
< br >
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
make install
~/.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 ~/.profile或source ~/.bashrc将其导入到当前终端
source ~/.profile
source ~/.bashrc
pips requests
我已经创建了一个python包,它包装了实际的pip,称为pipm。所有pip命令都将按原样工作,而且它们将反映在需求文件中。不像pip-save(一段时间不活跃),一个类似的工具,我发现不能使用,它可以处理许多文件和环境(测试,开发,生产等)。它还有一个命令来升级所有/任何依赖项。
pipm
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
这条简单的线是一个起点。您可以很容易地构建一个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
pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt
更新:显然是pipenv没有得到Python维护者的正式认可,而之前的页面属于不同的组织。该工具有其优点和缺点,但下面的解决方案仍然实现了OP正在寻求的结果。
pipenv是一个依赖管理工具,它包装了pip,并提供了你想要的东西:
https://pipenv.kennethreitz.org/en/latest/#example-pipenv-workflow
$ pipenv install <package> 如果Pipfile不存在,这将创建一个Pipfile。如果存在,它将自动使用您提供的新包进行编辑。
$ pipenv install <package>
如果Pipfile不存在,这将创建一个Pipfile。如果存在,它将自动使用您提供的新包进行编辑。
Pipfile直接等价于package.json,而Pipfile.lock对应于package-lock.json。
这个呢:
pip freeze >> requirements.txt