Windows 10
conda 4.9.2(通过 miniconda)
我安装了一个软件包,不需要重新安装或升级任何其他依赖项。一旦我意识到我安装了不合适的软件包版本,我就将其删除,这是我看到的屏幕:
(pydata) PS C:\Users\Navneeth> conda remove xlrd
Collecting package metadata (repodata.json): done
Solving environment: |
Warning: 2 possible package resolutions (only showing differing packages):
- defaults/win-64::libtiff-4.1.0-h56a325e_1, defaults/win-64::zstd-1.4.9-h19a0ad4_0
- defaults/win-64::libtiff-4.2.0-hd0e1b90_0, defaults/win-64::zstd-1.4.5-h04227a9done
## Package Plan ##
environment location: C:\Users\Navneeth\Miniconda3\envs\pydata
removed specs:
- xlrd
The following packages will be downloaded:
package | build
---------------------------|-----------------
decorator-5.0.3 | pyhd3eb1b0_0 12 KB
importlib-metadata-3.7.3 | py38haa95532_1 31 KB
importlib_metadata-3.7.3 | hd3eb1b0_1 11 KB
ipython-7.22.0 | py38hd4e2768_0 998 KB
jupyter_client-6.1.12 | pyhd3eb1b0_0 88 KB
libtiff-4.1.0 | h56a325e_1 739 KB
nbformat-5.1.3 | pyhd3eb1b0_0 44 KB
notebook-6.3.0 | py38haa95532_0 4.4 MB
pandoc-2.12 | haa95532_0 13.2 MB
parso-0.8.2 | pyhd3eb1b0_0 69 KB
pillow-8.2.0 | py38h4fa10fc_0 671 KB
prometheus_client-0.10.0 | pyhd3eb1b0_0 46 KB
prompt-toolkit-3.0.17 | pyh06a4308_0 256 KB
terminado-0.9.4 | py38haa95532_0 26 KB
zipp-3.4.1 | pyhd3eb1b0_0 15 KB
zstd-1.4.9 | h19a0ad4_0 478 KB
------------------------------------------------------------
Total: 21.0 MB
The following packages will be REMOVED:
xlrd-2.0.1-pyhd3eb1b0_0
The following packages will be UPDATED:
decorator 4.4.2-pyhd3eb1b0_0 --> 5.0.3-pyhd3eb1b0_0
importlib-metadata pkgs/main/noarch::importlib-metadata-~ --> pkgs/main/win-64::importlib-metadata-3.7.3-py38haa95532_1
importlib_metadata 2.0.0-1 --> 3.7.3-hd3eb1b0_1
ipython 7.21.0-py38hd4e2768_0 --> 7.22.0-py38hd4e2768_0
jupyter_client 6.1.7-py_0 --> 6.1.12-pyhd3eb1b0_0
nbformat 5.1.2-pyhd3eb1b0_1 --> 5.1.3-pyhd3eb1b0_0
notebook 6.2.0-py38haa95532_0 --> 6.3.0-py38haa95532_0
pandoc 2.11-h9490d1a_0 --> 2.12-haa95532_0
parso 0.8.1-pyhd3eb1b0_0 --> 0.8.2-pyhd3eb1b0_0
pillow 8.1.2-py38h4fa10fc_0 --> 8.2.0-py38h4fa10fc_0
prometheus_client 0.9.0-pyhd3eb1b0_0 --> 0.10.0-pyhd3eb1b0_0
prompt-toolkit 3.0.8-py_0 --> 3.0.17-pyh06a4308_0
sqlite 3.33.0-h2a8f88b_0 --> 3.35.3-h2bbff1b_0
terminado 0.9.2-py38haa95532_0 --> 0.9.4-py38haa95532_0
zipp 3.4.0-pyhd3eb1b0_0 --> 3.4.1-pyhd3eb1b0_0
zstd 1.4.5-h04227a9_0 --> 1.4.9-h19a0ad4_0
The following packages will be DOWNGRADED:
libtiff 4.2.0-he0120a3_0 --> 4.1.0-h56a325e_1
Proceed ([y]/n)?
为什么 conda 要更新或降级所有这些其他软件包,而我安装时却没有执行相反的操作
xlrd
?有没有一种方法可以安全地删除刚刚的 xlrd.dll 文件? (我听说使用 --force
是有风险的。)
Conda 在删除时重新解决。安装时,Conda 首先尝试“冻结解决”,这相当于保持所有已安装的软件包固定,仅搜索所请求的软件包的兼容版本。在这种特定情况下,xlrd
(v2.1.0) 是仅具有
python>=3.6
约束的 noarch。所以这安装在这个冻结解决通道中。 约束
xlrd
也将添加到显式规范中。
1 删除时,Conda 将首先删除约束,然后使用新的一组显式规范重新解决环境。正是在这个解决方案中,Conda 识别出较新版本的软件包,然后建议更新。因此,不对称之处在于冻结的求解明确避免检查任何新包,但删除将触发此类检查。
目前没有办法在不绕过依赖性检查的情况下避免这种情况。曼巴
,一个已编译(快速!)的
conda
的直接替代品,如果没有任何依赖于它的指定包,将仅删除指定的包。这是我测试中的默认行为。
附录:仍然有一些无法解释的行为name: foo
channels:
- conda-forge
dependencies:
- python=3.8.0
- pip=20
为了模拟这是一个旧环境,我进入
envs/foo/conda-meta/history
并更改了
2行# update specs: ['pip=20', 'python=3.8.0']
到
# update specs: ['python=3.8']
随后运行
conda install xlrd
正如预期的那样。然后
conda remove xlrd
给出了一个有点奇怪的结果:## Package Plan ##
environment location: /opt/conda/envs/foo
removed specs:
- xlrd
The following packages will be downloaded:
package | build
---------------------------|-----------------
pip-21.1.1 | pyhd8ed1ab_0 1.1 MB conda-forge
------------------------------------------------------------
Total: 1.1 MB
The following packages will be REMOVED:
xlrd-2.0.1-pyhd8ed1ab_3
The following packages will be UPDATED:
pip 20.3.4-pyhd8ed1ab_0 --> 21.1.1-pyhd8ed1ab_0
Proceed ([y]/n)?
这有效地复制了OP结果,然而,这里的额外奇怪之处是,不建议更新
python
包,即使我故意将其约束从
3.8.0
放松到3.8
。看来只有不在明确规范中的包才会在包删除期间进行更新。
[1] 显式规范是 Conda 对用户显式指定的每个约束保留的内部维护记录。您可以使用 conda env export --from-history
查看环境的当前明确规范。原始内部记录可以在
yourenv/conda-meta/history
找到。
[2] 不推荐这样做!
解决方案
conda list --revisions
和
conda install --revision=REVNUM
(或 conda install --rev REVNUM
)“回滚”到环境的先前版本。示例
xlrd
,并且想单独删除它。正如OP所说,简单地使用
conda remove xlrd
会影响其他包。相反,我选择将环境恢复到以前的版本(我没有安装 xlrd
包)。输入 conda list --revisions
将给出:
...
2022-09-05 17:43:08 (rev 8)
+et_xmlfile-1.1.0 (defaults/linux-64)
+openpyxl-3.0.9 (defaults/noarch)
2023-11-01 13:16:30 (rev 9)
ca-certificates {2022.07.19 (defaults/linux-64) -> 2023.08.22 (defaults/linux-64)}
openssl {1.1.1q (defaults/linux-64) -> 1.1.1w (defaults/linux-64)}
+xlrd-2.0.1 (defaults/noarch)
我想恢复到未安装
xlrd
的版本,即本例中的 rev 8。所以我输入
conda install --revision=8
。 rev 8 之后对环境所做的更改将被撤消。因此,包xlrd
将被删除,包ca-certificates
和openssl
将被降级,就像我没有输入conda install xlrd
一样。备注