185

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

尝试使用以下命令

$ pip install --upgrade -r requirements.txt

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

编辑

正如安迪在他的回答中提到的,软件包被固定到特定版本,因此无法通过 pip 命令升级软件包。

但是,我们可以pip-tools使用以下命令来实现这一点。

$ pip-review --auto

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

4

15 回答 15

157

我已经在这里回答了这个问题。这是我的解决方案:

因为没有简单的方法来逐个升级包并更新 requirements.txt 文件,所以我编写了这个pip-upgrader它还更新了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请在命令中添加参数。

完全披露:我写了这个包。

于 2017-04-26T18:50:14.897 回答
113

你可以试试:

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

您也可以忽略已安装的软件包并安装新软件包:

pip install --ignore-installed -r requirements.txt
于 2014-07-15T17:33:45.693 回答
66

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

例子:

lxml>=2.2.0

这会将 lxml 升级到高于 2.2.0 的任何版本

lxml>=2.2.0,<2.3.0

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

于 2014-07-15T17:37:14.467 回答
19

我建议冻结您的所有依赖项以获得可预测的构建

这样做时,您可以像这样一次更新所有依赖项:

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

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

于 2020-03-21T13:02:46.203 回答
8

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

pip install upgrade-requirements

然后运行:

upgrade-requirements

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

于 2020-02-16T10:48:46.853 回答
7

我只需要做同样的事情......使用这个小的单线来完成这项工作:

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 freeze 输出中获取包版本行并写入新的 requirements.txt

这具有保留原始 requirements.txt 的顺序的额外好处。:)

希望这可以帮助!

于 2020-03-13T06:43:33.020 回答
5

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

一个示例requirements.txt如下所示(~ 表示兼容):

Pillow==6.2.2
requests~=2.22.0
youtube_dl

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

这确保 Pillow 将保持在 6.2.2,请求将升级到最新的 2.22.x(如果可用),并且如果尚未安装最新版本的 youtube-dl。

于 2020-06-11T16:21:39.497 回答
4

由于我不能使用 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

于 2016-11-02T11:12:16.367 回答
4

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

于 2021-06-18T14:19:18.900 回答
2

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

pip freeze | sed 's/==/>=/' > requirements.txt
于 2020-07-23T09:21:28.637 回答
2

将依赖项修复到特定版本是推荐的做法。

这是另一个使用pur来保持依赖关系新鲜的解决方案!

提供您的 requirements.txt 文件,它会自动将您所有的高级软件包更新到最新版本,并保持您的原始格式和注释就位。

例如,在示例 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,然后分步安装更新。

于 2021-06-03T22:12:48.283 回答
1

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

cat requirements.txt | cut -f1 -d= | xargs pip install -U
于 2020-09-06T23:34:13.777 回答
0
  • 1)要从reqs.txt升级 pip 安装 的文件,请添加>=代替== 这将告诉 pip 安装大于或等于您请求的版本的lib ,此处通过安装请求库的最新版本

    1.a) **我对线程的回答**通过将py -m pip install -r reqs.txt添加到每日重新启动...或类似的东西,您可以更新已安装的库。安迪完美总结

    -我进入此线程的原因是查找有关如何更新虚拟环境基础 pip 的信息(对我来说通常是 10.0.03??)

希望能满足我能够得出两种解决方案之一的问题

A. 创建venv || B. 安装所需库

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

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

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

  1. py -m venv devenv

设置新的开发环境

  1. devenv\scripts\activate.bat

激活开发环境

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

安装基本库

产量输出

收集 pip >= 20.0.2(来自 -r requirenments.txt(第 1 行))使用缓存 > https://files.pythonhosted.org/packages/54/0c/d01aa759fdc501a58f431eb594a17495f15b88da142ce14b5845662c13f3/pip-20.0.2-py2.py3-无任何.whl

找到现有安装:pip 10.0.1

卸载 pip-10.0.1:

 Successfully uninstalled pip-10.0.1
 Successfully installed pip-20.0.2

很抱歉脑转储,希望这可以帮助某人:)

奥斯汀 ‍

于 2020-03-06T01:32:14.760 回答
-1

如果你在你的 django 项目中安装了任何东西,并且在安装后你想更新你的需求文件,这个命令可以更新你的 requirements.txt 文件 pip freeze > requirements.txt

如果您的项目中不存在您的需求文件,您可以使用此命令生成新的 requirements.txt 文件 pip freeze > requirements.txt

于 2020-01-23T10:39:45.927 回答
-14

我如下编辑 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;
于 2017-12-14T09:07:27.740 回答