I am trying to install Climada on my Mac. I have anaconda installed and python is as saved in /opt/anaconda3/bin/python (I believe it's python 3.11.8.
The Climada documentation says to create a virtual environment using Mamba.
mamba create -n climada_env -c conda-forge climada
Then it says you can activate the environment and start working.
I've tried this two ways, and failed both times.
First attempt: create a new virtual environment, install Mamba there. So far so good. Then I try to install Climada within that virtual environment using:
mamba install -c conda-forge climada
The error I get is:
Pinned packages:
- python=3.13
error libmamba Could not solve for environment specs
The following packages are incompatible
├─ climada =* * is installable with the potential options
│ ├─ climada [3.3.2|4.0.0|4.0.1|4.1.0] would require
│ │ └─ python =3.9 *, which can be installed;
│ └─ climada [4.1.0|5.0.0] would require
│ └─ python >=3.9,<3.12 * with the potential options
│ ├─ python [3.10.0|3.10.1|...|3.11.9], which can be installed;
│ ├─ python 3.12.0rc3 would require
│ │ └─ _python_rc =* *, which does not exist (perhaps a missing channel);
│ └─ python [3.9.0|3.9.1|...|3.9.9], which can be installed;
└─ pin on python 3.13.* =* * is not installable because it requires
└─ python =3.13 *, which conflicts with any installable versions previously reported.
critical libmamba Could not solve for environment specs
Second attempt: First I install Mamba in my base folder using
conda install -c conda-forge mamba
and then I create the new virtual env using the mamba create command above, taken from the Climada installation instructions. This time the error I get is below.
(base) donfry@DONs-Air ~ % mamba create -n climada_env_2 -c conda-forge climada
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString stringByStandardizingPath]: unrecognized selector sent to instance 0x600003714330'
*** First throw call stack:
(
0 CoreFoundation 0x000000018c242ccc __exceptionPreprocess + 176
1 libobjc.A.dylib 0x000000018bd2a788 objc_exception_throw + 60
2 CoreFoundation 0x000000018c2f502c -[NSObject(NSObject) __retain_OA] + 0
3 CoreFoundation 0x000000018c1accdc ___forwarding___ + 1580
4 CoreFoundation 0x000000018c1ac5f0 _CF_forwarding_prep_0 + 96
5 Foundation 0x000000018d2abcd4 -[NSProcessInfo arguments] + 188
6 CoreFoundation 0x000000018c2beaac __getDefaultArguments_block_invoke + 96
7 libdispatch.dylib 0x000000018bf3e3e8 _dispatch_client_callout + 20
8 libdispatch.dylib 0x000000018bf3fc68 _dispatch_once_callout + 32
9 CoreFoundation 0x000000018c2be448 _addBackstopValuesForIdentifierAndSource + 652
10 CoreFoundation 0x000000018c1783dc __81-[_CFXPreferences(SourceAdditions) withNamedVolatileSourceForIdentifier:perform:]_block_invoke + 144
11 CoreFoundation 0x000000018c2be0e4 -[_CFXPreferences withNamedVolatileSourceForIdentifier:perform:] + 272
12 CoreFoundation 0x000000018c17e764 -[CFPrefsSearchListSource addNamedVolatileSourceForIdentifier:] + 136
13 CoreFoundation 0x000000018c2fd54c __108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke.155 + 296
14 CoreFoundation 0x000000018c2fd1f4 -[_CFXPreferences withSearchLists:] + 84
15 CoreFoundation 0x000000018c179cb4 __108-[_CFXPreferences(SearchListAdditions) withSearchListForIdentifier:container:cloudConfigurationURL:perform:]_block_invoke + 300
16 CoreFoundation 0x000000018c2fd3a0 -[_CFXPreferences withSearchListForIdentifier:container:cloudConfigurationURL:perform:] + 384
17 CoreFoundation 0x000000018c1795d8 -[_CFXPreferences copyAppValueForKey:identifier:container:configurationURL:] + 156
18 CoreFoundation 0x000000018c179500 _CFPreferencesCopyAppValueWithContainerAndConfiguration + 112
19 SystemConfiguration 0x000000018cf2a818 SCDynamicStoreCopyProxiesWithOptions + 180
20 libcurl.4.dylib 0x0000000103308624 Curl_macos_init + 16
21 libcurl.4.dylib 0x00000001032e4ae8 global_init + 172
22 libcurl.4.dylib 0x00000001032e4a2c curl_global_init + 68
23 libmamba.2.0.0.dylib 0x0000000102f6cfac _GLOBAL__sub_I_singletons.cpp + 24
24 dyld 0x000000018bd8105c ___ZZNK5dyld46Loader25findAndRunAllInitializersERNS_12RuntimeStateEENK3$_0clEv_block_invoke + 168
25 dyld 0x000000018bdbf0d4 ___ZNK5dyld313MachOAnalyzer18forEachInitializerER11DiagnosticsRKNS0_15VMAddrConverterEU13block_pointerFvjEPKv_block_invoke.202 + 172
26 dyld 0x000000018bdb299c ___ZNK5dyld39MachOFile14forEachSectionEU13block_pointerFvRKNS0_11SectionInfoEbRbE_block_invoke + 496
27 dyld 0x000000018bd622fc _ZNK5dyld39MachOFile18forEachLoadCommandER11DiagnosticsU13block_pointerFvPK12load_commandRbE + 300
28 dyld 0x000000018bdb1930 _ZNK5dyld39MachOFile14forEachSectionEU13block_pointerFvRKNS0_11SectionInfoEbRbE + 192
29 dyld 0x000000018bdb4208 _ZNK5dyld39MachOFile32forEachInitializerPointerSectionER11DiagnosticsU13block_pointerFvjjRbE + 160
30 dyld 0x000000018bdbedc8 _ZNK5dyld313MachOAnalyzer18forEachInitializerER11DiagnosticsRKNS0_15VMAddrConverterEU13block_pointerFvjEPKv + 432
31 dyld 0x000000018bd7d070 _ZNK5dyld46Loader25findAndRunAllInitializersERNS_12RuntimeStateE + 524
32 dyld 0x000000018bd83614 _ZNK5dyld416JustInTimeLoader15runInitializersERNS_12RuntimeStateE + 36
33 dyld 0x000000018bd7d45c _ZNK5dyld46Loader23runInitializersBottomUpERNS_12RuntimeStateERN5dyld35ArrayIPKS0_EE + 220
34 dyld 0x000000018bd7d400 _ZNK5dyld46Loader23runInitializersBottomUpERNS_12RuntimeStateERN5dyld35ArrayIPKS0_EE + 128
35 dyld 0x000000018bd810ec _ZZNK5dyld46Loader38runInitializersBottomUpPlusUpwardLinksERNS_12RuntimeStateEENK3$_1clEv + 116
36 dyld 0x000000018bd7d628 _ZNK5dyld46Loader38runInitializersBottomUpPlusUpwardLinksERNS_12RuntimeStateE + 380
37 dyld 0x000000018bda04d8 _ZN5dyld44APIs25runAllInitializersForMainEv + 464
38 dyld 0x000000018bd66f7c _ZN5dyld4L7prepareERNS_4APIsEPKN5dyld313MachOAnalyzerE + 3156
39 dyld 0x000000018bd65edc start + 1844
)
libc++abi: terminating due to uncaught exception of type NSException
Any idea what is going with either/both errors? And more importantly, what I can do to fix these?
You're trying to install an old package into a new interpreter. Set the controls of the way-back machine to an earlier era. Using the same interpreter that the Climada documentation author used should work smoothly.
I believe it's python 3.11.8.
That sounds like a good plan. However the "Pinned packages: - python=3.13" output suggests that your mamba install is trying to use a quite recently released interpreter. Climada released 5.0.0 back in summer, and then interpreter 3.13 was released a few months later.
Conda is an effective but slow means of dealing with the binary dependencies of complex builds. Mamba was an attempt to do the same thing faster, and then some of its improvements were folded back into conda. Nowadays many people prefer uv (e.g. uv pip install ...) due to its blinding speed and ease of specifying the desired interpreter version.
You may be able to get away with just doing this:
which python && python --version
python -m pip install climada
The first line verifies the activated interpreter is coming from where you think it is, running 3.11 which should be fine. And the second line grabs the package from pypi.
I found this worked smoothly, under MacOS sequoia 15.1.
In a fresh project directory, create a three-line
requirements.txt
file which mentions a pair of related deps:
Then ensure uv
is available, set up a 3.11 interpreter, freeze the dep versions, install deps, and verify a good import.
which uv || curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv --python=python3.11
source .venv/bin/activate && uv pip compile --upgrade --quiet requirements.txt -o requirements.lock
source .venv/bin/activate && uv pip install -r requirements.lock
source .venv/bin/activate && python -c 'import climada'
Repeating with interpreter 3.12 also works smoothly.
Repeating with 3.13 reports "Failed to build llvmlite==0.43.0
" ... "Could not find a llvm-config
binary.",
which is explaining a need to build from source
since some binary wheels are not yet available for 3.13.
Using uv in this way will create .venv/
in the current directory, as we can see from those activate commands. As you experiment with it, discarding with rm -rf
and redoing it is safe. You can get it back with that requirements file.
(I used make
to run these commands,
so those last three bash invocations did
three independent activates.)
The core difficulty you encountered is you lost track of what python interpreter, and version, you were using. Some of your favorite libraries do not (yet) work with 3.13.
As a rule of thumb, always activate a project environment before running python, or running a jupyter lab kernel, or installing a library. Avoid putting new libraries under /usr/local
, or /usr
, or the miniconda base environment, as it will only lead to confusion.