TL;DR: dependency conflicts: Updating one requires (by its requirements) to downgrade another

You are right:

conda update --all

is actually the way to go1. Conda always tries to upgrade the packages to the newest version in the series (say Python 2.x or 3.x).

Dependency conflicts

But it is possible that there are dependency conflicts (which prevent a further upgrade). Conda usually warns very explicitly if they occur.

e.g. X requires Y <5.0, so Y will never be >= 5.0

That's why you 'cannot' upgrade them all.

Resolving

Update 1: since a while, mamba has proven to be an extremely powerful drop-in replacement for conda in terms of dependency resolution and (IMH experience) finds solutions to problems where conda fails. A way to invoke it without installing mamba is via the --solver=libmamba flag (requires conda-libmamba-solver), as pointed out by matteo in the comments.

To add: maybe it could work but a newer version of X working with Y > 5.0 is not available in conda. It is possible to install with pip, since more packages are available in pip. But be aware that pip also installs packages if dependency conflicts exist and that it usually breaks your conda environment in the sense that you cannot reliably install with conda anymore. If you do that, do it as a last resort and after all packages have been installed with conda. It's rather a hack.

A safe way you can try is to add conda-forge as a channel when upgrading (add -c conda-forge as a flag) or any other channel you find that contains your package if you really need this new version. This way conda does also search in this places for available packages.

Considering your update: You can upgrade them each separately, but doing so will not only include an upgrade but also a downgrade of another package as well. Say, to add to the example above:

X > 2.0 requires Y < 5.0, X < 2.0 requires Y > 5.0

So upgrading Y > 5.0 implies downgrading X to < 2.0 and vice versa.

(this is a pedagogical example, of course, but it's the same in reality, usually just with more complicated dependencies and sub-dependencies)

So you still cannot upgrade them all by doing the upgrades separately; the dependencies are just not satisfiable so earlier or later, an upgrade will downgrade an already upgraded package again. Or break the compatibility of the packages (which you usually don't want!), which is only possible by explicitly invoking an ignore-dependencies and force-command. But that is only to hack your way around issues, definitely not the normal-user case!


1 If you actually want to update the packages of your installation, which you usually don't. The command run in the base environment will update the packages in this, but usually you should work with virtual environments (conda create -n myenv and then conda activate myenv). Executing conda update --all inside such an environment will update the packages inside this environment. However, since the base environment is also an environment, the answer applies to both cases in the same way.

Answer from jonas-eschle on Stack Overflow
Top answer
1 of 7
428

TL;DR: dependency conflicts: Updating one requires (by its requirements) to downgrade another

You are right:

conda update --all

is actually the way to go1. Conda always tries to upgrade the packages to the newest version in the series (say Python 2.x or 3.x).

Dependency conflicts

But it is possible that there are dependency conflicts (which prevent a further upgrade). Conda usually warns very explicitly if they occur.

e.g. X requires Y <5.0, so Y will never be >= 5.0

That's why you 'cannot' upgrade them all.

Resolving

Update 1: since a while, mamba has proven to be an extremely powerful drop-in replacement for conda in terms of dependency resolution and (IMH experience) finds solutions to problems where conda fails. A way to invoke it without installing mamba is via the --solver=libmamba flag (requires conda-libmamba-solver), as pointed out by matteo in the comments.

To add: maybe it could work but a newer version of X working with Y > 5.0 is not available in conda. It is possible to install with pip, since more packages are available in pip. But be aware that pip also installs packages if dependency conflicts exist and that it usually breaks your conda environment in the sense that you cannot reliably install with conda anymore. If you do that, do it as a last resort and after all packages have been installed with conda. It's rather a hack.

A safe way you can try is to add conda-forge as a channel when upgrading (add -c conda-forge as a flag) or any other channel you find that contains your package if you really need this new version. This way conda does also search in this places for available packages.

Considering your update: You can upgrade them each separately, but doing so will not only include an upgrade but also a downgrade of another package as well. Say, to add to the example above:

X > 2.0 requires Y < 5.0, X < 2.0 requires Y > 5.0

So upgrading Y > 5.0 implies downgrading X to < 2.0 and vice versa.

(this is a pedagogical example, of course, but it's the same in reality, usually just with more complicated dependencies and sub-dependencies)

So you still cannot upgrade them all by doing the upgrades separately; the dependencies are just not satisfiable so earlier or later, an upgrade will downgrade an already upgraded package again. Or break the compatibility of the packages (which you usually don't want!), which is only possible by explicitly invoking an ignore-dependencies and force-command. But that is only to hack your way around issues, definitely not the normal-user case!


1 If you actually want to update the packages of your installation, which you usually don't. The command run in the base environment will update the packages in this, but usually you should work with virtual environments (conda create -n myenv and then conda activate myenv). Executing conda update --all inside such an environment will update the packages inside this environment. However, since the base environment is also an environment, the answer applies to both cases in the same way.

2 of 7
28

To answer more precisely to the question:

conda (which is conda for miniconda as for Anaconda) updates all but ONLY within a specific version of a package -> major and minor. That's the paradigm.

In the documentation you will find "NOTE: Conda updates to the highest version in its series, so Python 2.7 updates to the highest available in the 2.x series and 3.6 updates to the highest available in the 3.x series." doc

If Wang does not gives a reproducible example, one can only assist. e.g. is it really the virtual environment he wants to update or could Wang get what he/she wants with

conda update -n ENVIRONMENT --all

*PLEASE read the docs before executing "update --all"! This does not lead to an update of all packages by nature. Because conda tries to resolve the relationship of dependencies between all packages in your environment, this can lead to DOWNGRADED packages without warnings.


If you only want to update almost all, you can create a pin file

echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned

before running the update. conda issues not pinned

If later on you want to ignore the file in your env for an update, you can do:

conda update --all --no-pin

You should not do update --all. If you need it nevertheless you are saver to test this in a cloned environment.

First step should always be to backup your current specification:

conda list -n py35 --explicit 

(but even so there is not always a link to the source available - like for jupyterlab extensions)

Next you can clone and update:

conda create -n py356 --clone py35

conda activate py356
conda config --set pip_interop_enabled True # for conda>=4.6
conda update --all

conda config


update:

Currently I would use mamba (or micromamba) as conda pkg-manager replacement


update:

Because the idea of conda is nice but it is not working out very well for complex environments I personally prefer the combination of nix-shell (or lorri) and poetry [as superior pip/conda .-)] (intro poetry2nix).

Alternatively you can use nix and mach-nix (where you only need you requirements file. It resolves and builds environments best.


On Linux / macOS you could use nix like

nix-env -iA nixpkgs.python37

to enter an environment that has e.g. in this case Python3.7 (for sure you can change the version)

or as a very good Python (advanced) environment you can use mach-nix (with nix) like

mach-nix env ./env -r requirements.txt 

(which even supports conda [but currently in beta])

or via api like

nix-shell -p nixFlakes --run "nix run github:davhau/mach-nix#with.ipython.pandas.seaborn.bokeh.scikit-learn "

Finally if you really need to work with packages that are not compatible due to its dependencies, it is possible with technologies like NixOS/nix-pkgs.

🌐
Anaconda
anaconda.com › docs › getting-started › working-with-conda › packages › update-packages
Updating conda packages - Anaconda
The sections below explain how to update individual packages, multiple packages at once, or entire environments. You can also run conda update --help to see a list of all available update command options.
🌐
Conda
docs.conda.io › projects › conda › en › stable › commands › update.html
conda update — conda 26.3.2 documentation
Update conda packages to the latest compatible version. This command accepts a list of package names and updates them to the latest versions that are compatible with all other packages in the environment.
🌐
Anaconda
anaconda.com › home › blog › keeping anaconda up to date
Anaconda | Keeping Anaconda Up To Date
October 1, 2025 - conda create -n myenv --clone root conda update -n myenv --all
🌐
Conda
docs.conda.io › docs › using › pkgs.html
Managing packages — conda 26.3.3.dev39 documentation
Because the pinned specs are included with each conda install, subsequent conda update commands without --no-pin will revert NumPy back to the 1.7 series. To automatically add default packages to each new environment that you create: Open a terminal window and run: conda config --add create_default_packages PACKAGENAME1 PACKAGENAME2 · Now, you can create new environments and the default packages will be installed in all of them.
🌐
Cleancode
cleancode.studio › data-science › conda › conda-update-package
Clean Code Studio - Conda Update Package
The conda update command is used to update a package or packages in your conda environment. To update a package, you can use the following syntax: ... To update all packages in your environment, you can use the conda update --all command.
🌐
GitHub
github.com › conda › conda › issues › 1414
conda update anaconda vs. conda update --all · Issue #1414 · conda/conda
July 6, 2015 - It seems conda update anaconda and conda install --all are trying to upgrade and downgrade the exact opposite set of packages. What is the reason for this behaviour? If I want to keep all packages "consistent" at the highest possible level, which of the commands is preferable?
Author   sensharma
Find elsewhere
🌐
Conda
docs.conda.io › projects › conda › en › latest › commands › update.html
conda update — conda 24.11.4.dev37 documentation
Update conda packages to the latest compatible version. This command accepts a list of package names and updates them to the latest versions that are compatible with all other packages in the environment.
🌐
Saturn Cloud
saturncloud.io › blog › how-to-update-all-possible-packages-in-anaconda-a-guide
How to Update All Possible Packages in Anaconda: A Guide | Saturn Cloud Blog
January 9, 2024 - This command will check for updates for all packages in the current environment. If updates are available, conda will list them and ask for your confirmation to proceed.
🌐
Conda
docs.conda.io › projects › conda › en › stable › user-guide › tasks › manage-conda.html
Managing conda — conda 26.3.2 documentation
==> WARNING: A newer version of conda exists. <== current version: 4.6.13 latest version: 4.8.0 · Update conda by running: conda update --name base conda
🌐
Conda
docs.conda.io › projects › conda › en › stable › user-guide › tasks › manage-pkgs.html
Managing packages — conda 26.3.2 documentation
Because the pinned specs are included with each conda install, subsequent conda update commands without --no-pin will revert NumPy back to the 1.7 series. To automatically add default packages to each new environment that you create: Open a terminal window and run: conda config --add create_default_packages PACKAGENAME1 PACKAGENAME2 · Now, you can create new environments and the default packages will be installed in all of them.
🌐
Fig
fig.io › manual › conda › update
conda update <package...> | Fig
Updates conda packages to the latest compatible version
🌐
Claridge-Chang Lab
claridgechang.net › blog › updating-anaconda
Updating Anaconda - Claridge-Chang Lab
The Anaconda distribution is a very convenient version of scientific Python that installs a lot of modules as well as a Launcher that offers three GUI apps: IPython Console, Spyder (a...
🌐
Conda
docs.conda.io › projects › conda › en › stable › commands › env › update.html
conda env update — conda 26.3.2 documentation
Report all output as json. Suitable for using conda programmatically. ... Select the backend to use for normal output rendering. ... Can be used multiple times. Once for detailed output, twice for INFO logging, thrice for DEBUG logging, four times for TRACE logging. ... Do not display progress bar. ... conda env update conda env update -n=foo conda env update -f=/path/to/environment.yml conda env update --name=foo --file=environment.yml conda env update vader/deathstar
🌐
Quora
quora.com › What-is-the-difference-between-these-two-Anaconda-commands-for-Python-conda-update-all-versus-conda-update-conda
What is the difference between these two Anaconda commands for Python, 'conda update all' versus 'conda update conda'? - Quora
Answer (1 of 2): conda is a utility tool that manages packages. But conda itself is also a package. So, doing [code ]conda update conda[/code] will check if the Anaconda server has an update for the “conda” package and then update that single package and its dependencies, if required, but ...
Top answer
1 of 16
588

root is the old (pre-conda 4.4) name for the main environment; after conda 4.4, it was renamed to be base. source

What 95% of people actually want

In most cases what you want to do when you say that you want to update Anaconda is to execute the command:

conda update --all

(But this should be preceded by conda update -n base conda or simply conda update conda so you have the latest conda version installed)

This will update all packages in the current environment to the latest version -- with the small print being that it may use an older version of some packages in order to satisfy dependency constraints (often this won't be necessary and when it is necessary the package plan solver will do its best to minimize the impact).

This needs to be executed from the command line, and the best way to get there is from Anaconda Navigator, then the "Environments" tab, then click on the triangle beside the base environment, selecting "Open Terminal":

This operation will only update the one selected environment (in this case, the base environment). If you have other environments you'd like to update you can repeat the process above, but first click on the environment. When it is selected there is a triangular marker on the right (see image above, step 3). Or from the command line you can provide the environment name (-n envname) or path (-p /path/to/env), for example to update your dspyr environment from the screenshot above:

conda update -n dspyr --all

Update individual packages

If you are only interested in updating an individual package then simply click on the blue arrow or blue version number in Navigator, e.g. for astroid or astropy in the screenshot above, and this will tag those packages for an upgrade. When you are done you need to click the "Apply" button:

Or from the command line:

conda update astroid astropy

Updating just the packages in the standard Anaconda Distribution

If you don't care about package versions and just want "the latest set of all packages in the standard Anaconda Distribution, so long as they work together", then you should take a look at this gist.

Why updating the Anaconda package is almost always a bad idea

In most cases updating the Anaconda package in the package list will have a surprising result: you may actually downgrade many packages (in fact, this is likely if it indicates the version as custom). The gist above provides details.

Leverage conda environments

Your base environment is probably not a good place to try and manage an exact set of packages: it is going to be a dynamic working space with new packages installed and packages randomly updated. If you need an exact set of packages then create a conda environment to hold them. Thanks to the conda package cache and the way file linking is used doing this is typically i) fast and ii) consumes very little additional disk space. E.g.

conda create -n myspecialenv -c bioconda -c conda-forge python=3.5 pandas beautifulsoup seaborn nltk

The conda documentation has more details and examples.

pip, PyPI, and setuptools?

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.

Commercial use of Anaconda or Anaconda Enterprise

It is pretty much exactly the same story, with the exception that you may not be able to update the base environment if it was installed by someone else (say to /opt/anaconda/latest). If you're not able to update the environments you are using you should be able to clone and then update:

conda create -n myenv --clone base
conda update -n myenv --all
2 of 16
146

If you are trying to update your Anaconda version to a new one, you'll notice that running the new installer wouldn't work, as it complains the installation directory is non-empty.

So you should use conda to upgrade as detailed by the official docs:

conda update conda
conda update anaconda


In Windows, if you made a "for all users" installation, it might be necessary to run from an Anaconda prompt with Administrator privileges.

This prevents the error:

ERROR conda.core.link:_execute(502): An error occurred while uninstalling package 'defaults::conda-4.5.4-py36_0'. PermissionError(13, 'Access is denied')

🌐
conda-forge
conda-forge.org › maintainer documentation › maintaining packages
Maintaining packages | conda-forge | community-driven packaging for conda
3 weeks ago - For these reasons, maintainers are asked to fork the feedstock to their personal account, push to a branch in the fork and then open a PR to the conda-forge repo. When a new version of a package is released on PyPI/CRAN/.., we have a bot that automatically creates version updates for the feedstock. In most cases you can simply merge this PR and it should include all changes.
🌐
Conda
docs.conda.io › projects › conda › en › latest › user-guide › tasks › manage-conda.html
Managing conda — conda 24.11.4.dev31 documentation
==> WARNING: A newer version of conda exists. <== current version: 4.6.13 latest version: 4.8.0 · Update conda by running: conda update --name base conda
🌐
Conda
docs.conda.io › projects › conda › en › latest › user-guide › tasks › manage-pkgs.html
Managing packages — conda 24.11.4.dev39 documentation
December 6, 2021 - Because the pinned specs are included with each conda install, subsequent conda update commands without --no-pin will revert NumPy back to the 1.7 series. To automatically add default packages to each new environment that you create: Open a terminal window and run: conda config --add create_default_packages PACKAGENAME1 PACKAGENAME2 · Now, you can create new environments and the default packages will be installed in all of them.