abh*_*kar 78 python packages pip requirements.txt
如何使用pip命令从requirements.txt文件升级所有python包?
试过下面的命令
$ pip install --upgrade -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
因为,python包后缀为版本号(Django==1.5.1
),它们似乎没有升级.有没有比手动编辑requirements.txt文件更好的方法?
编辑
正如Andy在他的回答包中提到的那样固定到特定版本,因此无法通过pip命令升级包.
但是,我们可以pip-tools
使用以下命令实现此目的.
$ pip-review --auto
Run Code Online (Sandbox Code Playgroud)
这将自动从requirements.txt升级所有包(确保pip-tools
使用pip install命令安装).
Fre*_*cer 65
你可以试试:
pip install --upgrade --force-reinstall -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
您也可以忽略已安装的软件包并安装新软件包:
pip install -I, --ignore-installed -r requirements.txt
Run Code Online (Sandbox Code Playgroud)
Sim*_*aei 61
我已在这里回答了这个问题.这是我的解决方案:
因为没有简单的方法来逐个包升级,并且更新了requirements.txt文件,所以我编写了这个pip-upgradeder,它还会更新requirements.txt
文件中所选包(或所有包)的版本.
安装
pip install pip-upgrader
Run Code Online (Sandbox Code Playgroud)
用法
激活你的virtualenv(重要的是,因为它还将在当前的virtualenv中安装新版本的升级包).
cd
进入你的项目目录,然后运行:
pip-upgrade
Run Code Online (Sandbox Code Playgroud)
高级用法
如果要求放在非标准位置,请将它们作为参数发送:
pip-upgrade path/to/requirements.txt
Run Code Online (Sandbox Code Playgroud)
如果您已经知道要升级的包,只需将它们作为参数发送:
pip-upgrade -p django -p celery -p dateutil
Run Code Online (Sandbox Code Playgroud)
如果需要升级到预发布/发布后版本,--prerelease
请在命令中添加参数.
完全披露:我写了这个包.
And*_*ndy 29
不可以.您的需求文件已固定到特定版本.如果您的要求设置为该版本,则不应尝试升级超出这些版本.如果需要升级,则需要在需求文件中切换到未固定的版本.
例:
lxml>=2.2.0
Run Code Online (Sandbox Code Playgroud)
这会将lxml升级到任何比2.2.0更新的版本
lxml>=2.2.0,<2.3.0
Run Code Online (Sandbox Code Playgroud)
这会将lxml升级到2.2.0和2.3.0之间的最新版本.
Vis*_*rde 13
建议的做法是修复特定版本的依赖关系。
这是另一个使用pur来保持依赖项最新的解决方案!
提供您的requirements.txt 文件,它会自动将您的所有高级包更新到最新版本,并保留您的原始格式和注释。
例如,在示例 requests.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.
Run Code Online (Sandbox Code Playgroud)
由于 pur 永远不会修改您的环境或已安装的软件包,因此它的速度非常快,您可以安全地运行它,而不必担心损坏您的本地虚拟环境。Pur 将更新 requests.txt 文件与安装更新分开。因此,您可以使用 pur,然后分步安装更新。
Her*_*mes 12
我建议冻结您的所有依赖项,以便进行可预测的构建。
这样做时,您可以像这样一次更新所有依赖项:
sed -i '' 's/[~=]=/>=/' requirements.txt
pip install -U -r requirements.txt
pip freeze | sed 's/==/~=/' > requirements.txt
Run Code Online (Sandbox Code Playgroud)
完成上述操作后,使用新的软件包集测试您的项目,并最终将文件提交requirements.txt
到存储库,同时仍然允许安装修补程序。
第二个答案是最有用的,但我想做的是锁定一些软件包,同时让其他软件包处于最新版本(例如 youtube-dl)。
一个例子requirements.txt
如下(〜表示兼容):
Pillow==6.2.2
requests~=2.22.0
youtube_dl
Run Code Online (Sandbox Code Playgroud)
然后在终端中使用命令pip install --upgrade -r requirements.txt
这可确保 Pillow 保持在 6.2.2,请求将升级到最新的 2.22.x(如果可用),并且将安装最新版本的 youtube-dl(如果尚未安装)。
小智 7
您可以在 Linux 和 Mac 上使用以下命令:
cat requirements.txt | cut -f1 -d= | xargs pip install -U
Run Code Online (Sandbox Code Playgroud)
小智 6
另一种解决方案是使用upgrade-requirements包
pip install upgrade-requirements
Run Code Online (Sandbox Code Playgroud)
然后运行:
upgrade-requirements
Run Code Online (Sandbox Code Playgroud)
它将升级所有不是最新版本的包,并在最后创建一个更新的 requirements.txt。
小智 5
我只需要做同样的事情......用这个小的单线来完成这项工作:
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
Run Code Online (Sandbox Code Playgroud)
哪一个:
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 的顺序的额外好处。:)
希望这可以帮助!