更新conda软件包,除了Python。

6

我是Python的初学者,正在使用旧版Anaconda,其中包含Python 3.5.2版本,因为我想使用TensorFlow。我有一些过时的软件包,希望用 " conda update all " 来进行更新。有没有一种方法可以在不更新Python到与TensorFlow不兼容的3.6版本的情况下完成这个操作?

3个回答

10

简短回答

conda update --all --dry-run 2>/dev/null |
    grep -Fe '-->' |
    cut -d' ' -f3 |
    grep -ve 'python' |
    xargs conda update

长答案

步骤1:运行干燥以检查要更新的软件包

命令

conda update --all --dry-run

结果

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: //anaconda3/envs/general


The following packages will be UPDATED:

  astroid                                      2.3.1-py37_0 --> 2.3.2-py37_0
  ca-certificates                               2019.8.28-0 --> 2019.10.16-0
  openssl                                 1.0.2t-h1de35cc_1 --> 1.1.1d-h1de35cc_3
  pip                                         19.2.3-py37_0 --> 19.3.1-py37_0
  pylint                                       2.4.2-py37_0 --> 2.4.3-py37_0
  python                                   3.7.0-hc167b69_0 --> 3.7.4-h359304d_1
  sqlite                                  3.30.0-ha441bb4_0 --> 3.30.1-ha441bb4_0



DryRunExit: Dry run. Exiting.

步骤二:去除标准错误输出的信息(可选,但更加清晰)

命令

conda update --all --dry-run 2>/dev/null

结果

Collecting package metadata (current_repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: //anaconda3/envs/general


The following packages will be UPDATED:

  astroid                                      2.3.1-py37_0 --> 2.3.2-py37_0
  ca-certificates                               2019.8.28-0 --> 2019.10.16-0
  openssl                                 1.0.2t-h1de35cc_1 --> 1.1.1d-h1de35cc_3
  pip                                         19.2.3-py37_0 --> 19.3.1-py37_0
  pylint                                       2.4.2-py37_0 --> 2.4.3-py37_0
  python                                   3.7.0-hc167b69_0 --> 3.7.4-h359304d_1
  sqlite                                  3.30.0-ha441bb4_0 --> 3.30.1-ha441bb4_0

步骤三:提取包名所在的行

命令

conda update --all --dry-run 2>/dev/null |
    grep -Fe '-->'

结果

  astroid                                      2.3.1-py37_0 --> 2.3.2-py37_0
  ca-certificates                               2019.8.28-0 --> 2019.10.16-0
  openssl                                 1.0.2t-h1de35cc_1 --> 1.1.1d-h1de35cc_3
  pip                                         19.2.3-py37_0 --> 19.3.1-py37_0
  pylint                                       2.4.2-py37_0 --> 2.4.3-py37_0
  python                                   3.7.0-hc167b69_0 --> 3.7.4-h359304d_1
  sqlite                                  3.30.0-ha441bb4_0 --> 3.30.1-ha441bb4_0

步骤四:生成软件包名称列表
命令:
conda update --all --dry-run 2>/dev/null |
    grep -Fe '-->' |
    cut -d' ' -f3

注意:由于每个包名称前面有2个空格,因此包名称是该行的第三个字段。这导致使用参数-f3
astroid
ca-certificates
openssl
pip
pylint
python
sqlite

步骤 5:从列表中删除不需要更新的软件包

命令

conda update --all --dry-run 2>/dev/null |
    grep -Fe '-->' |
    cut -d' ' -f3 |
    grep -ve 'python'

结果

astroid
ca-certificates
openssl
pip
pylint
sqlite

步骤 6:更新清单中的软件包

命令

conda update --all --dry-run 2>/dev/null |
    grep -Fe '-->' |
    cut -d' ' -f3 |
    grep -ve 'python' |
    xargs conda update

2
要学习一些很酷的终端技巧。 - sgalpha01

5

另一种简单的方法:conda update --all python=3.5.2

将Python版本替换为您当前安装的版本。这将更新所有软件包,由于目标版本的python已安装,因此不会被更新。这也适用于多个软件包:conda update all python=3.5.2 spyder=3.3.6


3

您可以手动更新所有包:conda update yourpackage

...或者您可以使用conda update --all更新所有包,然后再使用conda install python=3.5.2降级Python。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接