Setup of dependencies for python code development can be frustrating. No fits-all solution is available. However, using conda and a
environment.yml-file offers the most robust approach. A *.yml file tells conda which dependencies (i.e. packages) with the exact version to install and from where (that is: conda channels).
This post describes how to setup a conda environment for running this Jupyter notebook. To start, download the example *.yml file:
You can install Conda in Linux and Windows. For Linux instructions, see this post. The instructions below describe how to installall/use conda in Windows
choco install miniconda3 --params="'/AddToPath:1'"
This will install conda and add it to your Path. In other words, whenever you open a Windows cmd and type
conda, it will be available.
I update conda always manually with
conda update -n base conda. The following command will prevent choco to upgrade conda automatically:
choco pin add -n=miniconda3
Afterwards, open a cmd window and type:
It should show something like this:
Update conda package manager to the latest release with:
conda update -n base conda
Here, “base” is the base environment of conda.
A good practice is to never touch the base environment except for conda updates. For all other package installs, create an explicit environment.
You can create a new conda env from scratch with the following command:
conda env create -n jupyter_testenv
Afterwards, activate it with:
conda activate jupyter_testenv
Everything you do now will be done inside the activated env. For example, it is a good practive to install
pip inside every conda env:
conda install pip
If you run pip afterwards, it will be used from within the env:
pip install requests
Generally, you should avoid installing packages with
pip if they’re available on conda. E.g., the better command would be:
conda install requests
Conda has several channels from where packages can be installed. You should not mix packages from different channels in the same env.
The most famous channel is
conda-forge, a community managed conda channel. Usually, most of my conda envs contain packages installed from conda-forge.
conda install pip -c conda-forge conda install requests -c conda-forge
Check the output of any install operation. If you see that a large list of packages was formerly installed from the base channel, and you issued
-c conda-forge, all existing packages in the env will be reinstalled from
This may not be what you want. Either always use
-c conda-forge or never inside one env. It is also recommended to never mix packages from multiple channels.
Sometimes, you must install packages with pip because they’re not yet on conda. You can do this and most of the time it will work (depending on the package).
conda update --all -c conda-forge will update all packages in the env installed with conda , not those installed with pip - you must update pip dependencies manually (e.g.
pip install --upgrade requests).
Install packages from existing environment file (.yml)
Once conda is installed, download environment_ipynb.yml to a folder.
Have a look at the files’s contents:
name: jupyter_env channels: - pyviz - conda-forge - defaults dependencies: - python - jupyterlab - fiona - geoviews - shapely - hvplot - geopandas>=0.5.0 - pandas - holoviews - cartopy - pyproj - rtree - numpy - matplotlib - emoji>=0.5.1 - hdbscan>=0.8.20 - gdal - attrs - seaborn - descartes - regex - scipy - tagmaps
The first line contains the name of the environment to create. Then channels are listed - note that these are ordered, e.g. conda-forge has a higher priority than the anaconda default channel.
Following this, packages are listed with minimum version requirements. Therefore, if newer versions are available, conda will install these latest available versions. This provides some flexibility.
Sometimes conda won’t install the latest versions, depending on your OS and other factors. Most of the time, fall back to older versions happens when there’re conflicts between different package dependencies.
To install these dependencies, open the Anaconda prompt:
either press Windows and type
anaconda prompt(if you installed anaconda)
or, if conda is on your
PathEnvironment (if you followed the miniconda approach described above), go to the folder where you downloaded the
*.yml, hold down
Shift-Key and Right-Click. You will either see an entry
Open Power Shell Window hereor
Open command line Window here. Both of these work. Here’s a screenshot:
In (Ana)conda prompt (or command line/ console/ bash), run the following command:
conda env create -f environment_ipynb.yml
Make sure you provide the full path to the downloaded file, e.g.
Conda will now resolve dependencies and create the environment with the name
jupyter_env. You can use this approach to re-create the environment on any platform. In the screenshot below, I am creating the environment inside of WSL (Windows Subsystem for Linux) running Ubuntu 18.04:
Once conda finished, activate the env by running:
conda activate jupyter_env
The command line will change and show
jupyter_env at the beginning, indicating that you’re now working within this environment. Start Jupyter Lab Server by typing
jupyter lab and hit
Optional: Install Jupyter labextension
The notebook may ask you to install the jupyter labextension. You can do this in the console with active jupyter_env:
conda activate jupyter_env jupyter labextension install @pyviz/jupyterlab_pyviz
In case you happen to use WSL as well, make sure to close all Jupyter Lab instances and restart the WSL shell and jupyter_env before issuing this command, otherwise you might stumble into this issue.
Open Jupyter Lab
to open jupyter lab in your browser.
First, check what’s on your Path in Windows:
- click start (or hit the ⊞ Win-Key)
- type “Environment”, select “Edit the system environment variables”
- select “Environment Variables..”
- under system variables, search for the entry for Path
- click edit and check the list of folders and the order. E.g. if you type
condain your cmd, Windows will go through this list of folders and the first
conda.exefound will be used.
- you only need one python system installation
- if you use conda, you don’t need to install python
- if you use miniconda, you don’t need anaconda
Show existing conda envs:
conda env list
Show list of packages in current conda env with:
conda activate jupyter_env conda list
Remove conda env and all packages in this env with:
conda remove --name jupyter_env --all
Make sure that you’re on the latest conda version:
# this command needs to be executed without any active env conda update conda