使用pip命令从requirements.txt升级python包

如何使用pip命令从requirements.txt文件升级我所有的python包?

尝试以下命令

$ pip install --upgrade -r requirements.txt

因为python包的后缀是版本号(Django==1.5.1),所以它们似乎不会升级。有没有比手动编辑requirements.txt文件更好的方法?

编辑

正如Andy在他的回答中提到的,包被固定到特定的版本,因此不可能通过pip命令升级包。

但是,我们可以使用下面的命令来实现pip-tools

$ pip-review --auto

这将自动升级requirements.txt中的所有包(确保使用pip install命令安装pip-tools)。

182217 次浏览

你可以试试:

pip install --upgrade --force-reinstall -r requirements.txt

你也可以忽略已安装的包并安装新的包:

pip install --ignore-installed -r requirements.txt

不。您的需求文件已经固定到特定的版本。如果您的需求已设置为该版本,则不应尝试升级到超出这些版本的版本。如果你要升级需要,那么你需要在你的需求文件中切换到未固定的版本。

例子:

lxml>=2.2.0

这将把lxml升级到任何比2.2.0更新的版本

lxml>=2.2.0,<2.3.0

这将把lxml升级到2.2.0和2.3.0之间的最新版本。

因为我不能用bash来做这个,我写了一个python模块来创建一个新的没有版本的需求文件并使用它:

data = open('requirements-prod.pip', 'r')
data2 = open('requirements-prod-no-version.pip', 'w')
for line in data.readlines():
new_line = line[:line.index('==')]
data2.write(new_line + '\n')
data2.flush()

然后从新文件pip install -U -r requirements-prod-no-version.pip安装库

最后将版本冻结到原始文件pip freeze > requirements-prod.pip

我已经回答了这个问题here。以下是我的解决方案:

因为没有简单的方法来逐个包升级和更新requirements.txt文件,所以我为所选的包(或所有包)写了也更新你的requirements.txt文件中的版本

安装

pip install pip-upgrader

使用

激活您的virtualenv(这很重要,因为它还将在当前的virtualenv中安装升级包的新版本)。

cd到你的项目目录,然后运行:

pip-upgrade

高级用法

如果需求被放置在一个非标准的位置,将它们作为参数发送:

pip-upgrade path/to/requirements.txt

如果你已经知道要升级什么包,只需将它们作为参数发送:

pip-upgrade -p django -p celery -p dateutil

如果你需要升级到预发布/后发布版本,在你的命令中添加--prerelease参数。

完全披露:这个包是我写的。

我编辑requirements.txt,如下所示,然后运行$sh ./requirements.txt

pip install -U amqp;
pip install -U appdirs;
pip install -U arrow;
pip install -U Babel;
pip install -U billiard;
pip install -U celery;
pip install -U Django;
pip install -U django-cors-headers;
pip install -U django-crispy-forms;
pip install -U django-filter;
pip install -U django-markdown-deux;
pip install -U django-pagedown;
pip install -U django-timezone-field;
pip install -U djangorestframework;
pip install -U fcm-django;
pip install -U flower;
pip install -U gunicorn;
pip install -U kombu;
pip install -U Markdown;
pip install -U markdown2;
pip install -U packaging;
如果你在django项目中安装了任何东西,并且在安装后你想要更新你的需求文件,这个命令可以更新你的需求文件 PIP freeze > requirements.txt

.txt 如果你的需求文件在你的项目中不存在,你可以使用这个命令创建新的需求文件 PIP freeze > requirements.txt

.txt

另一个解决方案是使用upgrade-requirements

pip install upgrade-requirements

然后运行:

upgrade-requirements

它将升级所有不是最新版本的包,并在最后创建一个更新后的requirements.txt。

  • reqs.txt升级pip已安装文件 添加> =来代替= = 这将告诉pip安装大于或等于你请求的版本的自由,这里通过安装所请求的库

    的最新版本

    1.a) **我对线程的回答**通过添加py -m pip install -r reqs.txt到每日重启…或者,您可以更新已安装的库。

    我进入这个线程的原因是寻找关于如何更新虚拟环境基本pip的信息(对我来说通常是10.0.03 ??)

希望能够满足一个问题,我已经能够推导出两个解决方案之一

A.创建venv ||

感谢安迪,我满足了B的需求

通过在reqs.txt中添加pip > = 请求的版本

在实例化新的虚拟环境||重新实例化以前的Venv

  1. py -m venv devenv

设置新的开发环境

  1. devenv\scripts\activate.bat

激活dev env

  1. python -m pip install -r requirenments.txt

安装基本库

让步的输出

收集pip > = 20.0.2(从-r requirements .txt(第一行)) 使用缓存的>https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-none-any.whl

找到现有安装:pip 10.0.1

卸载pip-10.0.1:

 Successfully uninstalled pip-10.0.1
Successfully installed pip-20.0.2

对不起,我的大脑被倾倒了,希望这能帮助到一些人:)

🤳奥斯汀👨‍🎤🚀🥊

我也不得不这么做……使用下面的一行小代码来完成这项工作:

packages=$(cat requirements.txt | sed 's/==.*//g'); echo $packages | xargs pip3 install -U; freeze=$(pip3 freeze); for p in $(echo $packages); do echo $freeze | grep -E "^${p}==" >> requirements.new; done

哪一个:

  • packages=$(cat requirements.txt | sed 's/==.*//g')在requirements.txt中创建当前包名的列表(删除版本)。
  • echo $packages | xargs pip3 install -U然后将所有包作为参数传递给pip3进行升级。
  • freeze=$(pip3 freeze);获取requirements.txt所需格式的所有当前包版本
  • for p in $(echo $packages)然后遍历包名
    • echo $freeze | grep -E "^${p}==" >> requirements.new从pip冻结输出中获得与包匹配的包版本行,并写入new requirements.txt
    • 李< / ul > < / >

    这样做还有一个额外的好处,那就是保留原始requirements.txt的顺序。:)

    希望这能有所帮助!

我建议冻结你所有的依赖,以便有可预测的构建

当这样做时,你可以像这样立即更新所有依赖项:

sed -i '' 's/[~=]=/>=/' requirements.txt
pip install -U -r requirements.txt
pip freeze | sed 's/==/~=/' > requirements.txt

完成上述操作后,使用新包集测验你的项目,并最终将requirements.txt文件提交到存储库,同时仍然允许安装热修复程序。

第二个答案是最有用的,但我想做的是锁定一些包,而其他包在最新版本(例如youtube-dl)。

requirements.txt的例子是这样的(~表示兼容):

Pillow==6.2.2
requests~=2.22.0
youtube_dl

然后在终端中,使用命令pip install --upgrade -r requirements.txt

这确保枕头将保持在6.2.2,请求将升级到最新的2.22。X(如果可用),如果还没有安装最新版本的youtube-dl,则将安装。

我想最简单的解决方案是创建requirements.txt:

pip freeze | sed 's/==/>=/' > requirements.txt

你可以在Linux和Mac上使用以下命令:

cat requirements.txt | cut -f1 -d= | xargs pip install -U

修复对特定版本的依赖关系是推荐的做法。

下面是另一个使用咕噜咕噜叫来保持依赖关系新鲜的解决方案!

给pur你的requirements.txt文件,它会自动更新你所有的高级包到最新版本,保持你原来的格式和注释到位。

例如,在example requirements.txt上运行pur将包更新到当前可用的最新版本:

$ pur -r requirements.txt
Updated flask: 0.9 -> 0.10.1
Updated sqlalchemy: 0.9.10 -> 1.0.12
Updated alembic: 0.8.4 -> 0.8.6
All requirements up-to-date.

由于pur从不修改您的环境或安装的包,它非常快,您可以安全地运行它,而不用担心破坏您的本地虚拟环境。Pur将更新requirements.txt文件与安装更新分开。因此,您可以使用pur,然后在不同的步骤中安装更新。

更健壮的解决方案是IMO使用依赖项管理,例如poetryhttps://python-poetry.org,它带有一个详尽的依赖项解析器。

使用pip-tools,你有一个基本的要求。在需要的依赖项和一个带有固定版本的requirements.txt文件中。pip-tools然后自动生成固定的版本,这使得处理包括升级依赖项在内的整个过程更加容易。

# requirements.in
django

和自动生成的requirements.txt(固定所有依赖项)

$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile requirements.in
#
asgiref==3.2.3
# via django
django==3.0.3
# via -r requirements.in
pytz==2019.3
# via django
sqlparse==0.3.0
# via django

如果你使用这个工作流,我强烈推荐,它是

pip-compile --upgrade

生成带有最新版本的requirements.txt。