Software Deployment with Conda¶
Intro¶
Conda is an open source package management system and environment management system for installing multiple versions of software packages and their dependencies and switching easily between them. See the conda documentation for more.
Environments¶
Activating the root environments¶
Every beamline workstation has some standard conda environments. All users can access them, but they can only be installed or updated with root privileges. You can list the names and locations of the available environments like so:
$ conda env list
# conda environments:
#
analysis-17Q2.0 /opt/conda_envs/analysis-17Q2.0
collection-17Q2.0 /opt/conda_envs/collection-17Q2.0
root * /opt/conda
To use an environment, active it.
$ source activate analysis-17Q2.0
discarding /opt/conda/bin from PATH
prepending /opt/conda_envs/analysis-17Q2.0/bin to PATH
You can inspect the packages installed in the current environment using the command
$ conda list
# packages in environment at /opt/conda_envs/analysis-17Q2.0:
#
amostra 0.2 py36_0
anaconda-client 1.6.2 py36_0
analysis 17Q2.0 py36_4
attrs 16.3.0 py36_1
bleach 1.5.0 py36_0
bluesky 0.9.0 py36_0
<snip>
Creating custom user environments¶
If the standard system conda environments are missing some packges that you want to use, you can create your own.
You can copy one of the standard system environments and add some packages.
$ conda create -n myenv --clone analysis some_package another_package
Or, you can create a new environment from scratch. (If you plan to use the
environment with Jupyter, you must include the ipykernel
package along with
any others you want.)
$ conda create -n myenv ipykernel some_package another_package
Activate the environment.
$ source activate myenv
If the package is available from pip but not conda, you can use pip. Make sure you have activated the environment first, as we did just above.
$ pip install some_other_package
Access custom user environments in NSLS-II’s JupyterHub¶
Users can connect to their own user-created conda environments through JupyterHub.
Activate your custom environment.
$ source activate myenv
Create a new Jupyter kernel for the environment.
$ python -m ipykernel install --user --name myenv --display-name "Python (myenv)" Installed kernelspec myenv in /home/dallan/.local/share/jupyter/kernels/myenv
The
--name
value is used by Jupyter internally. These commands will overwrite any existing kernel with the same name.--display-name
is what you see in the notebook menus. For details see this section of the IPython documentationSpecify a host in the kernel file.
The kernel requires one simple customization to work on NSLS-II’s JupyterHub deployment. We need to specify which host to run the kernel on.
You can check the hostname of the current machine like so:
$ hostname xf23id1-srv1
Open the kernel file that we generated above. You can get its location from the output displayed by our kernel creation command in the previous step. In our example, recall you that it showed
Installed kernelspec myenv in /home/dallan/.local/share/jupyter/kernels/myenv
so we will open the file
kernel.json
in that directory.{ "argv": [ "/home/dallan/conda_envs/myenv/bin/python", "-m", "ipykernel_launcher", "-f", "{connection_file}" ], "display_name": "Python (myenv)", "language": "python" }
Add a new item,
"host"
mapped to the hostname of the machine to run this kernel on.{ "argv": [ "/home/dallan/conda_envs/myenv/bin/python", "-m", "ipykernel_launcher", "-f", "{connection_file}" ], "display_name": "Python (myenv)", "language": "python", "host": "xf23id1-srv1" }
Notice that we added a comma on the second-to-last line, after
"python"
. There is no comma after the last entry. JSON files are strict about this. (This often trips up Python users, because Python tolerates trailing commas in lists.)
Now, when you create a new notebook in JupyterHub, your new kernel should appear in the menu. (You may need to refresh the browser, but you should not need to log out of JupyterHub or restart your server.)
Internal Anaconda Server¶
We run an internal anaconda server at https://conda.nsls2.bnl.gov.
The anaconda
channel contains the “official” packages distributed by
Continuum Analytics, including widely-used packages like numpy. When
Continuum releases new version of packages, we can vet them before we make
them available to users on this channel. The defaults
channel is not
vetted by us; it should never be used internally.
The nsls2-tag
channel is where we put the latest tagged stable versions of
every package not officially distributed by Continuum. This includes in-house
packages like ophyd and bluesky and other dependencies that don’t happen to be
packaged by Continuum yet. The nsls2-dev
channel is where we put
bleeding-edge development versions of these packages.