anaconda 更新所有可能的包?
anaconda update all possible packages?
我试过conda search --outdated
,有很多过时的包,比如scipy是0.17.1,但最新的是0.18.0。但是,当我执行 conda update --all
时。它不会更新任何包。
更新 1
conda update --all --alt-hint
Fetching package metadata .......
Solving package specifications: ..........
# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#
更新 2
我可以单独更新这些包。我可以conda update scipy
。但是为什么我不能一次全部更新呢?
TL;DR:依赖冲突:更新一个需要(按其要求)降级另一个
你是对的:
conda update --all
实际上是要走的路1。 Conda 始终尝试将软件包升级到系列中的最新版本(比如 Python 2.x 或 3.x)。
依赖冲突
但可能存在依赖冲突(这会阻止进一步升级)。如果它们发生,Conda 通常会非常明确地发出警告。
例如X 要求 Y <5.0,所以 Y 永远不会 >= 5.0
这就是你 'cannot' 全部升级的原因。
正在解决
补充:也许它可以工作,但 conda 中不提供使用 Y > 5.0 的较新版本的 X。可以使用 pip 安装,因为 pip 中提供了更多软件包。但请注意,如果存在依赖冲突,pip 也会安装包,并且它通常会破坏您的 conda 环境,因为您无法再可靠地使用 conda 安装。如果您这样做,请在万不得已的情况下,在使用 conda 安装所有软件包之后才这样做。这更像是一个 hack。
您可以尝试的一种安全方法是在升级时添加 conda-forge 作为频道(添加 -c conda-forge
作为标志)或您发现包含您的包的任何其他频道 如果你真的需要这个新版本。这样 conda 也会在这个地方搜索可用的包。
考虑您的更新:您可以分别升级它们,但这样做不仅包括升级还包括降级还有另一个包裹。比如说,添加到上面的例子中:
X > 2.0 要求 Y < 5.0,X < 2.0 要求 Y > 5.0
所以升级 Y > 5.0 意味着将 X 降级到 < 2.0,反之亦然。
(当然,这是一个教学示例,但在现实中也是一样的,通常只是依赖和子依赖更复杂)
因此您仍然无法通过单独进行升级全部;依赖关系是无法满足的,所以更早或更晚,升级将再次降级已经升级的包。或者破坏包的兼容性(你通常不想要!),这只能通过显式调用 ignore-dependencies 和 force-命令。但这只是 破解 解决问题的方法,绝对不是普通用户的情况!
1 如果您真的想更新您安装的软件包,您通常 不会 。基本环境中的命令 运行 将更新其中的包,但通常你应该使用虚拟环境(conda create -n myenv
然后是 conda activate myenv
)。在这样的环境中执行 conda update --all
将更新此环境中 中的包。但是,由于基础环境也是环境,所以答案同样适用于两种情况。
更准确地回答问题:
conda(对于 miniconda 和 Anaconda 都是 conda)更新所有但仅在包的特定版本内 -> 主要和次要。这就是范式。
在文档中您会发现“注意:Conda 更新到其系列中的最高版本,因此 Python 2.7 更新到 2.x 系列中可用的最高版本,3.6 更新到最高版本在 3.x 系列中可用。”
doc
如果王老师没有给出可复现的例子,只能辅助。
例如这真的是他想要更新的虚拟环境吗?或者 Wang 可以用
得到 he/she 想要的东西吗?
conda update -n ENVIRONMENT --all
*请在执行“update --all”之前阅读文档!
这不会自然导致所有包的更新。因为 conda 会尝试解决您环境中所有包之间的依赖关系,这可能会导致包降级而没有警告。
如果你只想更新几乎所有的,你可以创建一个pin文件
echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned
在 运行 更新之前。 conda issues not pinned
如果稍后您想忽略环境中的文件进行更新,您可以这样做:
conda update --all --no-pin
你不应该更新 --all。如果你仍然需要它,你可以在克隆环境中测试它。
第一步应该始终是备份您当前的规格:
conda list -n py35 --explicit
(但即便如此,并不总是 link 可用的源代码——比如 jupyterlab 扩展)
接下来您可以 clone 并更新:
conda create -n py356 --clone py35
conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all
更新:
目前我会使用 mamba(或 micromamba)作为 conda pkg-manager 的替代品
更新:
因为 conda 的想法很好,但它在复杂环境中的效果不是很好,我个人更喜欢 nix-shell
(或 lorri
)和 poetry
的组合 [as上级 pip/conda .-)] (intro poetry2nix).
或者你可以使用 nix
和 mach-nix
(你只需要你的需求文件。它最好地解决和构建环境。
在 Linux / macOS 上你可以使用 nix like
nix-env -iA nixpkgs.python37
进入一个环境,例如在这种情况下 Python3.7(当然你可以更改版本)
或者作为一个非常好的 Python(高级)环境,您可以使用 mach-nix(带有 nix),例如
mach-nix env ./env -r requirements.txt
(甚至支持 conda [但目前处于测试阶段])
或通过api喜欢
nix-shell -p nixFlakes --run "nix run github:davhau/mach-nix#with.ipython.pandas.seaborn.bokeh.scikit-learn "
最后,如果您真的需要使用由于其依赖性而不兼容的包,可以使用 NixOS/nix-pkgs.
等技术
想象一下包的依赖关系图,当包的数量变大时,upgrading/adding 个包发生冲突的几率就会高得多。为避免这种情况,只需在 Anaconda 中创建一个新环境即可。
节俭一点,只安装你需要的。对我来说,我在新环境中安装了以下软件包:
- pandas
- scikit-学习
- matplotlib
- 笔记本
- 喀拉斯
我总共有84个包裹。
如果使用 MS windows,您可以使用 Anaconda 导航器。点击环境,在下拉框中,默认为"installed"。您可以 select "updatable" 然后从那里开始
我用 conda
和 pip
解决了这个问题。
首先,我运行:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
之后,我打开 cmd 和 运行 这段代码
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
最后,您应该通过 pip install matplotlib
的代码在 pip 中安装 matplotlib
为了更新我使用的所有可能的包 conda update --update-all
有效!
同意麻友36的观点
例如,我在基础环境中安装新包时犯了一个错误,对某些包使用 conda,对其他一些包使用 pip。
为什么这样不好?
1.None of this is going to help with updating packages that have been > installed >from PyPI via pip, or any packages installed using python
setup.py install. conda list will give you some hints about the
pip-based Python packages you have in an environment, but it won't do
anything special to update them.
而且我的所有项目都在同一个环境中!而且我使用了全部更新 - 这很糟糕并且没有更新全部 -
所以,最好的办法是为每个项目创建一个新环境。为什么?
2. A Conda environment is a directory that contains a specific collection of Conda packages that you have installed. For example, you
may be working on a research project that requires NumPy 1.18 and its
dependencies, while another environment associated with an finished
project has NumPy 1.12 (perhaps because version 1.12 was the most
current version of NumPy at the time the project finished). If you
change one environment, your other environments are not affected. You
can easily activate or deactivate environments, which is how you
switch between them.
所以,总结一下:
为每个项目创建一个新的environment
注意 conda 和 pip
中的 differences
3.Only 包含您实际需要的包,并且 update 只有在必要时才正确地添加它们。
我试过conda search --outdated
,有很多过时的包,比如scipy是0.17.1,但最新的是0.18.0。但是,当我执行 conda update --all
时。它不会更新任何包。
更新 1
conda update --all --alt-hint
Fetching package metadata .......
Solving package specifications: ..........
# All requested packages already installed.
# packages in environment at /home/user/opt/anaconda2:
#
更新 2
我可以单独更新这些包。我可以conda update scipy
。但是为什么我不能一次全部更新呢?
TL;DR:依赖冲突:更新一个需要(按其要求)降级另一个
你是对的:
conda update --all
实际上是要走的路1。 Conda 始终尝试将软件包升级到系列中的最新版本(比如 Python 2.x 或 3.x)。
依赖冲突
但可能存在依赖冲突(这会阻止进一步升级)。如果它们发生,Conda 通常会非常明确地发出警告。
例如X 要求 Y <5.0,所以 Y 永远不会 >= 5.0
这就是你 'cannot' 全部升级的原因。
正在解决
补充:也许它可以工作,但 conda 中不提供使用 Y > 5.0 的较新版本的 X。可以使用 pip 安装,因为 pip 中提供了更多软件包。但请注意,如果存在依赖冲突,pip 也会安装包,并且它通常会破坏您的 conda 环境,因为您无法再可靠地使用 conda 安装。如果您这样做,请在万不得已的情况下,在使用 conda 安装所有软件包之后才这样做。这更像是一个 hack。
您可以尝试的一种安全方法是在升级时添加 conda-forge 作为频道(添加 -c conda-forge
作为标志)或您发现包含您的包的任何其他频道 如果你真的需要这个新版本。这样 conda 也会在这个地方搜索可用的包。
考虑您的更新:您可以分别升级它们,但这样做不仅包括升级还包括降级还有另一个包裹。比如说,添加到上面的例子中:
X > 2.0 要求 Y < 5.0,X < 2.0 要求 Y > 5.0
所以升级 Y > 5.0 意味着将 X 降级到 < 2.0,反之亦然。
(当然,这是一个教学示例,但在现实中也是一样的,通常只是依赖和子依赖更复杂)
因此您仍然无法通过单独进行升级全部;依赖关系是无法满足的,所以更早或更晚,升级将再次降级已经升级的包。或者破坏包的兼容性(你通常不想要!),这只能通过显式调用 ignore-dependencies 和 force-命令。但这只是 破解 解决问题的方法,绝对不是普通用户的情况!
1 如果您真的想更新您安装的软件包,您通常 不会 。基本环境中的命令 运行 将更新其中的包,但通常你应该使用虚拟环境(conda create -n myenv
然后是 conda activate myenv
)。在这样的环境中执行 conda update --all
将更新此环境中 中的包。但是,由于基础环境也是环境,所以答案同样适用于两种情况。
更准确地回答问题:
conda(对于 miniconda 和 Anaconda 都是 conda)更新所有但仅在包的特定版本内 -> 主要和次要。这就是范式。
在文档中您会发现“注意:Conda 更新到其系列中的最高版本,因此 Python 2.7 更新到 2.x 系列中可用的最高版本,3.6 更新到最高版本在 3.x 系列中可用。” doc
如果王老师没有给出可复现的例子,只能辅助。 例如这真的是他想要更新的虚拟环境吗?或者 Wang 可以用
得到 he/she 想要的东西吗?conda update -n ENVIRONMENT --all
*请在执行“update --all”之前阅读文档! 这不会自然导致所有包的更新。因为 conda 会尝试解决您环境中所有包之间的依赖关系,这可能会导致包降级而没有警告。
如果你只想更新几乎所有的,你可以创建一个pin文件
echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned
在 运行 更新之前。 conda issues not pinned
如果稍后您想忽略环境中的文件进行更新,您可以这样做:
conda update --all --no-pin
你不应该更新 --all。如果你仍然需要它,你可以在克隆环境中测试它。
第一步应该始终是备份您当前的规格:
conda list -n py35 --explicit
(但即便如此,并不总是 link 可用的源代码——比如 jupyterlab 扩展)
接下来您可以 clone 并更新:
conda create -n py356 --clone py35
conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all
更新:
目前我会使用 mamba(或 micromamba)作为 conda pkg-manager 的替代品
更新:
因为 conda 的想法很好,但它在复杂环境中的效果不是很好,我个人更喜欢 nix-shell
(或 lorri
)和 poetry
的组合 [as上级 pip/conda .-)] (intro poetry2nix).
或者你可以使用 nix
和 mach-nix
(你只需要你的需求文件。它最好地解决和构建环境。
在 Linux / macOS 上你可以使用 nix like
nix-env -iA nixpkgs.python37
进入一个环境,例如在这种情况下 Python3.7(当然你可以更改版本)
或者作为一个非常好的 Python(高级)环境,您可以使用 mach-nix(带有 nix),例如
mach-nix env ./env -r requirements.txt
(甚至支持 conda [但目前处于测试阶段])
或通过api喜欢
nix-shell -p nixFlakes --run "nix run github:davhau/mach-nix#with.ipython.pandas.seaborn.bokeh.scikit-learn "
最后,如果您真的需要使用由于其依赖性而不兼容的包,可以使用 NixOS/nix-pkgs.
等技术想象一下包的依赖关系图,当包的数量变大时,upgrading/adding 个包发生冲突的几率就会高得多。为避免这种情况,只需在 Anaconda 中创建一个新环境即可。
节俭一点,只安装你需要的。对我来说,我在新环境中安装了以下软件包:
- pandas
- scikit-学习
- matplotlib
- 笔记本
- 喀拉斯
我总共有84个包裹。
如果使用 MS windows,您可以使用 Anaconda 导航器。点击环境,在下拉框中,默认为"installed"。您可以 select "updatable" 然后从那里开始
我用 conda
和 pip
解决了这个问题。
首先,我运行:
conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5
之后,我打开 cmd 和 运行 这段代码
pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5
最后,您应该通过 pip install matplotlib
matplotlib
为了更新我使用的所有可能的包 conda update --update-all
有效!
同意麻友36的观点
例如,我在基础环境中安装新包时犯了一个错误,对某些包使用 conda,对其他一些包使用 pip。
为什么这样不好?
1.None of this is going to help with updating packages that have been > installed >from PyPI via pip, or any packages installed using python setup.py install. conda list will give you some hints about the pip-based Python packages you have in an environment, but it won't do anything special to update them.
而且我的所有项目都在同一个环境中!而且我使用了全部更新 - 这很糟糕并且没有更新全部 -
所以,最好的办法是为每个项目创建一个新环境。为什么?
2. A Conda environment is a directory that contains a specific collection of Conda packages that you have installed. For example, you may be working on a research project that requires NumPy 1.18 and its dependencies, while another environment associated with an finished project has NumPy 1.12 (perhaps because version 1.12 was the most current version of NumPy at the time the project finished). If you change one environment, your other environments are not affected. You can easily activate or deactivate environments, which is how you switch between them.
所以,总结一下:
为每个项目创建一个新的environment
注意 conda 和 pip
中的 differences
3.Only 包含您实际需要的包,并且 update 只有在必要时才正确地添加它们。