conda environment broken after updating conda - pip

after using conda extensively for a while, I was asked to update it yesterday and now things look broken. I have to admit that I am not an expert of what goes on behind the scenes so bear with me :)
After installing conda I used pip to install the various packages.
Yesterday I started working on some code from a tutorial on git, which suggested to create an ad-hoc environment to work with:
conda env create -f binder/environment.yml
At this step I was suggested to update conda, since I was using an old version. I can't find in my terminal that specific message (i.e. I can't find what version of conda I was using before), but here is what I get now when I check the version of conda:
(base) francesco ~$ conda list conda
# packages in environment at /Users/francesco/anaconda3:
#
# Name Version Build Channel
_anaconda_depends 2019.03 py36_0
anaconda custom py36_1
anaconda-client 1.7.2 py36_0
anaconda-navigator 1.8.7 py36_0
anaconda-project 0.8.4 py_0
conda 4.8.3 py36_0
conda-build 3.10.5 py36_0
conda-env 2.6.0 h36134e3_0
conda-package-handling 1.6.0 py36h1de35cc_0
conda-verify 3.4.2 py_1
One of the things I noticed after the update is that in order to activate/deactivate the environment I had to use conda activate/deactivate <env> instead of source activate/deactivate <env>.
After that I worked with the code in the new environment without any problem.
Today I tried to activate the main environment I work with, but I was asked to "init" my shell first with:
conda init bash
After that I activated my "usual" environment:
conda activate testenv
and I tried to start Jupyter Lab, but I got this error:
(testenv) francesco ~$ jupyter lab
Error executing Jupyter command 'lab': [Errno 2] No such file or directory
What is happening? Why is Jupyter Lab not working anymore in my usual environment?
I checked the installation in testenv and things look ok:
(testenv) francesco ~$ conda list | grep jup
jupyter 1.0.0 py37_7
jupyter_client 5.2.4 py37_0
jupyter_console 6.0.0 py37_0
jupyter_core 4.4.0 py37_0
(testenv) francesco ~$ pip list | grep jup
jupyter 1.0.0
jupyter-client 5.2.4
jupyter-console 6.0.0
jupyter-core 4.4.0
(testenv) francesco ~$
Does anyone know what is going on? This is a huge problem for me as conda/jupyter lab are the main tools I use for work :\

The common practice is to only install Jupyter in a single Conda environment (typically your base env if an Anaconda user), and always launch Jupyter from there. To use other Python envs in Jupyter, you need to install ipykernel in those envs, e.g.,
conda install -n testenv ipykernel
And, to avoid having to register your additional envs, it is recommended to install nb_conda_kernels in the env with Jupyter, e.g.,
conda install -n base nb_conda_kernels
As a side note, installing things with Pip can make environments unstable. I strongly recommend learning and adhering to the documented best practices.

#FrancescoLS It seems that you had perhaps an older version of Conda installed(?) as the CHANGELOG indicates that source activate was deprecated in favor of conda activate in Conda v4.4.0 (as is also noted in this "How to Get Ready for the Release of conda 4.4" post from Anaconda).
This really isn't an "answer" in any actionable way, but it seems that you are not alone in Conda update breaking people's environments.
superuser: Conda update conda does extra stuff and destroy my anaconda install
Conda Issue #8842: Conda Deletes All Modules During Update
there are lots more. :/
I think it is safe to say that keeping virtual environments safely intact during an upgrade is hard to do, and that when doing a major upgrade across virtual environment maintainers (Conda) it is even harder. This is one of the reasons that I personally try to have all of my project virtual environments be maintained either in native Python 3 venv virtual environments with pip or through Poetry (as they are (or at least used to be) way faster to restore than having to go through Conda's slower solver) and then only resorting to using Conda when I need to bring in multiple external binary applications.
Were you able to make a new Conda environment for your work that effectively restores it (perhaps from your own environment.yml file for that environment)?

Related

How to install Python 3.10 on the base enviornment of Anaconda?

I have python 3.9 installed in the anaconda base environment and have trouble installing the latest 3.10 version. I have tried to use "conda install -c conda-forge python=3.10" but it does not help resolve my problem. Over half a day, I have iteratively applied the command in the terminal but the package would not be installed. Any suggestion?
I've tried to use "conda install -c conda-forge python=3.10" and it did not work. My software still is Python 3.9 and I cannot apply the latest python version there.
Anaconda currently doesn't support versions higher than 3.9.
You can create your own environment using your IDE that utilize Python 3.11 and install all the required libraries via pip install from the command line interface.

How to make conda recognize pip installed python packages?

I have created a conda environnmennt
and then pip installed tensorflow using a pip wheel. numpy was installed by pip at same stage.
When trying to install scipy,
conda wants to install numpy in parallel of pip installed numpy....?
How to make various installed be recognized by conda ?
This is what the new configuration option pip_interop_enabled, introduced in Conda v4.6 is for. It is still considered a "preview" feature, but I've had success using it:
conda config --set pip_interop_enabled true
Until this feature is released in earnest, I think it would be wise to limit its use to a per-env-basis by using the --env flag when running the above.
It should be kept in mind that preferring Conda packages is still best practice. A must read in this regard is "Using Pip in a Conda Environment".

My Anaconda Navigator and Spyder won't launch after installing basemap

I just installed basemap using
conda install -c conda-forge basemap=1.0.8.dev0
and
conda install -c conda-forge basemap
in the Anaconda prompt but after that I was not able to launch neither Spyder nor Anaconda Navigator. I tried all trick provided here in Stackoverflow but none of them working. Any advice?
Shall I re-install the entire Anaconda without loss my libraries and packages?
(Spyder maintainer here) Mixing conda-forge and default packages is a really bad idea because they are compiled differently. That's the root cause of the problem you're experiencing here.
Shall I re-install the entire Anaconda without loss my libraries and packages?
Yes, I'm afraid you have to do that because you have corrupted your installation.
Any advice?
The solution is to create a separate conda environment to install conda-forge packages, like this
conda create -n basemap-env
source activate basemap-env
conda install -c conda-forge basemap=1.0.8.dev0 spyder
and start Spyder from that environment.

`conda update --all` not updating Spyder

I just installed Anaconda on a Windows 10 machine and the first thing I did thereafter was go into the Anaconda Prompt and run conda udpate conda and then conda update --all. As expected, it updated a lot of stuff. When I then ran Spyder, however, I got a pop-up saying that a new version of Spyder was available.
What? I just updated everything. Checking conda list I see that sypder 3.2.4 is indeed installed, so I do the following:
(base) C:\Users\Mark>conda update --all
Solving environment: done
All requested packages already installed.
(base) C:\Users\Mark>conda update spyder
Solving environment: done
Package Plan
environment location: C:\Users\Mark\Anaconda3
added / updated specs:
- spyder
The following packages will be downloaded:
package | build
---------------------------|-----------------
spyder-3.2.6 | py36_0 2.6 MB
The following packages will be UPDATED:
spyder: 3.2.4-py36h8845eaa_0 --> 3.2.6-py36_0
Proceed ([y]/n)?
Why is conda update -all not finding and updating my installed version of Spyder?
Have you tried just updating spyder?
conda update spyder
I had some similar behavior (on Linux) with conda, there it helped to be more specific:
conda update spyder=3.2.6
"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."
documentation conda
Try:
conda update -n base conda
Here, base is my current environment

Installing Python Package to Conda Env Without Using Conda

I have a fresh Anaconda environment in which I would like to install the latest release of mysql-connector-python (v2.1.3). I'm on a CentOS6 system. The problem is, the newest Conda-hosted package is 2.0.3 and because the connector is not currently hosted on PyPI, it cannot be installed via Pip. (Pip's --allow-external option has been deprecated.)
I know that I can easily install the package via yum install, but I believe that will install it outside of the Conda environment.
Is there any way, using yum or otherwise, to isolate this package solely to this particular Conda environment?
Turns out this is surprisingly simple. Just download the source for the Python package that is not available on PyPI and pip install at the source directory. Just remember to have the Conda environment you want to install to active and Pip will correctly isolate the install to env scope.
I was unaware of Pip's install from local options, so big thanks to the folks on the Anaconda mailing list for their help with this.

Resources