4

我是 python 的初学者,我使用的是旧版本的 anaconda,它有 3.5.2 版本的 python,因为我想使用 tensorflow。我有一些过时的软件包,我想用“conda update all”进行更新。有没有办法在不将 python 从 3.5 更新到 3.6 的情况下做到这一点,这与 tensorflow 不兼容?

4

3 回答 3

6

简答

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.

第 2 步:删除来自 stderr 的消息(可选,但更清晰)

命令

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

第 3 步:提取带有包名的行

命令

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

第 4 步:生成包名称列表

命令

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
于 2019-10-30T08:29:49.137 回答
2

您可以手动更新它们conda update yourpackage

...或者您可以全部更新它们conda update --all,然后再次使用conda install python=3.5.2.

于 2017-05-03T07:31:02.227 回答
1

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

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

于 2021-09-13T08:20:30.137 回答