在PowerShell中通过PIP一行升级过时的Python包

问题描述 投票:0回答:1

如何在PowerShell中通过PIP一行升级过时的Python包?

几天前,我在 pypa / pip 中创建了一个问题,询问为什么包名称无法在 PowerShell 中作为对象传递

pip list --outdated | Select-Object Package

开发商建议使用

py -m pip list --outdated --format=json | ConvertFrom-JSON

现在看来

((pip list --outdated --format=json | ConvertFrom-JSON).name | Out-String).replace("`r`n"," ")

输出过时的包在空间中分裂:

idna ipykernel ipython jedi jupyter-client jupyterlab jupyterlab-server lxml Pillow setuptools```
pip install ((pip list --outdated --format=json | ConvertFrom-JSON).name | Out-String).replace("`r`n"," ")

不起作用:

错误:无效要求:'idna ipykernel ipython jedi jupyter-client jupyterlab jupyterlab-server lxml Pillow setuptools'

但是,如果我使用

Write-Output

Write-Output "pip install -U" ((pip list --outdated --format=json | ConvertFrom-JSON).name | Out-String).replace("`r`n"," ")

它输出

pip install -U
idna ipykernel ipython jedi jupyter-client jupyterlab jupyterlab-server lxml Pillow setuptools

被分成两行,无法通过

Invoke-Expression
执行。

如果我使用

Write-Host

Write-Host "pip install -U" ((pip list --outdated --format=json | ConvertFrom-JSON).name | Out-String).replace("`r`n"," ") | Invoke-Expression

只是正常输出,但不执行:

pip install -U idna ipykernel ipython jedi jupyter-client jupyterlab jupyterlab-server lxmlPillow setuptools```

用两行来完成此操作是可以接受的:

$od = ((pip list --outdated --format=json | ConvertFrom-JSON).name | Out-String).replace("`r`n"," ")
Write-Output "pip install -U $od" | Invoke-Expression

但是,出于我的好奇,这可以写成一行吗?

powershell pip pipe
1个回答
0
投票

我一直忘记如何执行此操作,因此我将命令粘贴到此处作为备忘录:

pip install -U (pip list --outdated --format=json | ConvertFrom-JSON | ForEach {$_.name})

在 PowerShell 7.4.1 上测试。

© www.soinside.com 2019 - 2024. All rights reserved.