Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

conda list vs pip list differences in conda created environment

I am using conda version 4.5.11, python 3.6.6, and Windows 10.

I create a virtual environment using conda

conda create --name venv

When I check for installed packages

conda list

it is (as expected), empty.

But

pip list

is quite long.

Question #1: Why? - when I create a virtual environment using

python -m venv venv

the pip list is empty.

When I am not in an activated virtual environment, then

conda list

is also quite long, but it isn't the same as the pip list (* see follow up below) In general, the pip list is a subset of the conda list. There is at least one exception ('tables' in the pip list, not in conda list) but I haven't analysed too closely. The conda list changes/displays some (all?) hyphens to underscores (or pip does the reverse). There also a few instances of versions being different.

Question #2: Why? (and follow up questions - can they be? and should I care?)

I was hoping to have a baseline conda 'environment' (that may not be the right word) -ie, the packages I have installed/updated into Ananconda/conda and then all virtual environments would be pulled from that. If I needed to install something new, it would be first installed into the baseline. Only when I need to create an application using different versions of packages from the baseline (which I don't envision in the foreseeable future) would I need to update the virtual environments differently.

Question #3: Am I overthinking this? I am looking for consistency and hoping for understanding.

-- Thanks. Craig

Follow Up #1: After installing some packages to my empty conda venv, the results of conda list and pip list are still different, but the pip list is much shorter than it was, but is a subset of the conda list (it does not include two packages I don't use, so I don't care)

Follow Up #2: In the empty environment, I ran some code

python my-app.py

and was only mildly surprised that it ran without errors. As expected, when I installed a package (pytest), it failed to run due to the missing dependencies. So ... empty is not empty.

like image 346
J. Craig Williams Avatar asked Sep 23 '18 14:09

J. Craig Williams


1 Answers

1. conda list vs pip list

If all you did was create the environment (conda create -n venv), then nothing is installed in there, including pip. Nevertheless, the shell is still going to try to resolve pip on using the PATH environment variable, and is possibly finding the pip in the Anaconda/Miniconda base environment.

2. pip list is subset of conda list outside env

This could simply be a matter of conda installing things other than Python packages, which pip doesn't have the option to install. Conda is a more generic package manager and brings in all the dependencies (e.g., shared libraries) necessary to run each package - by very definition this is a broader range than what is available from the PyPI.

3. Overthinking

I think this is more of a workflow style question, and generally outside the scope of StackOverflow because it's going to get opinionated answers. Try searching around for best practice recommendations and pick a style suited to your goals.

Personally, I would never try to install everything into my base/root Conda environment simply because the more one installs, the more one has dependency requirements pulling in different directions. In the end, Conda will centralize all packages anyway (anaconda/pkgs or miniconda3/pkgs), so I focus on making modular environments that serve specific purposes.

like image 79
merv Avatar answered Sep 24 '22 13:09

merv