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

时间:2014-07-15 17:32:03

标签: python pip packages requirements.txt

如何使用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)。

15 个答案:

答案 0 :(得分:52)

你可以尝试:

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

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

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

答案 1 :(得分:47)

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

由于没有简单的方法来升级包和更新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参数。

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

答案 2 :(得分:29)

没有。您的需求文件已针对特定版本pinned。如果您的要求设置为该版本,则不应尝试升级超出这些版本。如果您需要进行升级,则需要在需求文件中切换到未固定版本。

示例:

lxml>=2.2.0

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

lxml>=2.2.0,<2.3.0

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

答案 3 :(得分:7)

我建议冻结所有依赖项,以具有可预测的版本

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

sed -i '' 's/==/>=/g' requirements.txt
pip install -U -r requirements.txt
pip freeze > requirements.txt

完成上述操作后,使用新的软件包套件对项目进行测试,并最终将requirements.txt文件{strong>提交到存储库中。

答案 4 :(得分:4)

我只需要做同样的事情...用这个小的一线工作:

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 Frozen输出中获取与软件包匹配的软件包版本行,并写入新的要求。txt

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

希望这会有所帮助!

答案 5 :(得分:3)

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

pip install upgrade-requirements

然后运行:

upgrade-requirements

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

答案 6 :(得分:2)

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

List cats = session.createCriteria(User.class)
    .createAlias("tenant", "tenant")
    .add(Restrictions.eqProperty("tenant.name", "sampleTenant") )
    .list();

然后从新文件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()

安装libs

最后将版本冻结到原始文件pip install -U -r requirements-prod-no-version.pip

答案 7 :(得分:1)

第二个答案是最有用的,但我想做的是锁定某些程序包,同时使其他程序包处于最新版本(例如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。

答案 8 :(得分:1)

我猜最简单的解决方案是使用以下命令创建requirements.txt:

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

答案 9 :(得分:1)

建议将依赖项修复到特定版本。

这是另一个使用 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,然后在单独的步骤中安装更新。

答案 10 :(得分:0)

  • 1)要从 reqs.txt 升级pip安装的文件 添加> = 代替 == 这将告诉pip安装大于或等于您请求的版本的 lib ,这里是安装请求的库的最新版本

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

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

我希望能够解决其中的一个问题

A。 venv ||的创建B.安装必需的库

多谢Andy满足了需求B

通过在 reqs.txt

中添加点 = 要求的版本

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

  1. py -m venv devenv

设置新的开发环境

  1. d evenv\scripts\activate.bat

激活开发环境

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

安装基本库

产量输出

收集点> = 20.0.2(来自-r requirenments.txt(第1行)) 使用缓存的> 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

对不起,我们希望有人帮忙:)

?奥斯汀??

答案 11 :(得分:0)

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

cat requirements.txt |切-f1 -d“ =” | xargs pip install -U

答案 12 :(得分:0)

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

答案 13 :(得分:-1)

如果您在django项目中安装了任何内容,并且在安装后想要更新需求文件,此命令可以更新您的require.txt文件 点冻结> requirements.txt

如果您的需求文件不存在于项目中,则可以使用此命令创建新的require.txt文件 点冻结> requirements.txt

答案 14 :(得分:-5)

我按如下所示编辑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;