What does conda do when "solving environment"
Asked Answered
P

6

81

Whenever I run conda install/remove/update <package>, it tells me it's "Solving environment" for some time before telling me the list of things it's going to download/install/update. Presumably it's looking for dependencies for <package>, but why does it sometimes remove packages after doing this operation? For example, as I was trying to install Mayavi, it decided it needed to remove Anaconda Navigator.

Furthermore it does not provide an option to perform only a subset of the suggested operations. Is there a way to specify that I don't want a package removed?

Pentateuch answered 8/8, 2018 at 19:7 Comment(1)
Well, the reason that it requires removing packages is because there are dependency conflicts, and removing one package was the easiest way for conda to resolve the conflict (for whatever definition of easy the conda solver uses). This is also the reason you cannot perform a subset of the operations, because your environment might end up in an inconsistent state. I'm not sure of the specific algorithm that's used, but the code is open source: github.com/conda/condaNaraka
M
60

You can add --debug option to the conda command and see the output from console(or terminal). For example, type conda update --debug numpy. From the output, we can see that the client requests repodata.json from channel list and do some computation locally in the Solving Environment Step.

Misbelief answered 4/11, 2018 at 7:6 Comment(0)
P
10

The short answer is: use mamba as a drop-in replacement for conda, it's much much faster at solving environments, no more waiting for minutes. mamba has been officially endorsed by the conda team.

Mamba also allows you to configure more precisely which packages you require to be installed and allows you to pin versions, as conda does. For a more detailed comparison of conda and mamba see this Stackoverflow answer: https://mcmap.net/q/162117/-how-could-using-mamba-instead-of-conda-as-package-manager-for-anaconda-be-problematic-closed

The long answer is: Solving conda environments with more than a few packages that each have dependencies on their own quickly ends up becoming a quite complicated SAT problem (see Boolean satisfiability problem and dependency hell)

With good algorithms, even fairly big SAT problems can be solved fast. In contrast to mamba's solver which is written in C++ and designed to be fast, it seems that conda's solver is not very high performance. It worked well enough when people used small environments in the past, but with bigger and bigger environments, conda has started to struggle.

I made the switch about a year ago and I have not once looked back. The open source project I'm working for (Nextstrain) has also started to recommend mamba in place of conda for new users. I have not seen anyone advocating against using mamba in place of conda.

Provitamin answered 28/10, 2022 at 15:45 Comment(0)
G
9

As a side note on the "Solving Environment" step...
Lack of administrator privileges may affect whether or where you can install python packages.

I observed that my installs would hang on the "Solving Environment" step and never get through when attempting to install packages while logged in as a non-administrator.

Getting switched to admin was possible for me on the machine I was stuck on, so I just did that and it solved the problem.

Commenter explains workaround when this is not possible.

Gerianne answered 3/2, 2019 at 16:10 Comment(2)
It's really not accurate. when you create environment in a a folder that doesn't need administrator privilege you don't need one in order to install python packages and for nothing else for that matter. You can of course create one very easily - I would edit the answerPahang
thanks. I wasn't aware of this. I was trying to figure out how to get around that issue at work where I can't just make myself the admin. and you're saying I can get around that so that's good news!!! I simply posted this because when I had my issue, my search for help led me here and I didn't find it.Gerianne
B
9

JUST WAIT! I wasted hours trying to fix this. It turns out, it just took around 45 minutes :/

Bruise answered 16/1, 2022 at 0:19 Comment(1)
Waiting is an option, but you're better off switching to mamba unless you like waiting ;) see https://mcmap.net/q/160798/-what-does-conda-do-when-quot-solving-environment-quotProvitamin
C
2

conda install --prune <<package>> helped me to install the right channel.

Suspecting environment used are for zipline and channel used not compatible with existing one. prune takes a lot of time but helped me in solving the environment issues.

Calabro answered 2/4, 2019 at 14:42 Comment(0)
S
0

That's because of the version specified for dependencies e.g.: scikit-learn==1.2.2. try to remove the version "==1.2.2", that will install latest version. After that you can uninstall the package and reinstall dependency with specific version using "pip install".

Schaper answered 10/7, 2023 at 11:58 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.