Python and Conda
Several versions of Python, as well Miniconda and Anaconda which use the conda package manager, are available on Kamiak.
Using Python
There are several standalone versions of Python available on Kamiak. To use Python, simply load its module.
module load python3
or
module load python2
or
module load python # which loads python2
The Python modules available on Kamiak generally provide only the Python binaries, standard library, and pip. If you would like to use additional scientific Python libraries (SciPy, NumPy, etc.) you can instead use Anaconda.
Using Anaconda or Miniconda
Anaconda and Miniconda combine Python with the Conda package manager. Miniconda provides just Python and Conda. Anaconda provides many bundled packages in addition to Python and Conda.
With Conda, you can create and use environments that have different versions of Python and packages installed in them. Switching between environments is called activating the environment. Environments are a useful way to put together a set of packages with specific versions and dependencies. It is recommended to always use environments, which are local to your home directory in ./conda/envs. Otherwise, by default you will use the system-wide “root” environment, which does not allow you to modify or install packages.
We recommend using Python from within Anaconda or Miniconda, rather than running Python standalone.
To start using Anaconda or Miniconda, simply load its module.
module load anaconda3 # or miniconda3
Do Not Use conda init
We do not recommend using conda init, it permanently alters your .bashrc so that the base environment is always activated in new shells. If installed, we recommend commenting out the conda init section from the end of your .bashrc.
Managing Environments
From that point forward, you can load packages and manage environments using “conda” commands.
Conda environments are grouped into locations or paths. Conda maintains a list of paths that are searched for environments available to you.
To view all your available environment paths, type:
conda config --show envs_dirs
To see all available python packages in the miniconda or anaconda installation, type:
conda list -n root
To see all available environments, type:
conda env list
Now let’s create a local environment called “myenv”.
conda create -n myenv
To activate the environment and use it, type:
source activate myenv
Now, let’s add the SciPy package from the Anaconda repository to our environment. We’ll specify a specific version, although this can be omitted to get the latest one.
conda install scipy=0.18.1
The package installs into the currently activated environment, but you can also specify an explicit environment name.
conda install -n myenv scipy=0.18.1
To use the activated environment, type:
python
To deactivate the environment, type:
source deactivate
Finally, to delete the environment, type:
conda remove -n myenv --all
Please see conda documentation for a description of managing environments and installing packages.
Conda commands are further described here.
Sharing Environments
If you wish to share an environment across a lab’s users, you can append a --prefix env_path
to the create and install commands to install packages into a central location you and others in your lab can use. The activate
command similarly takes the full path instead of just a name. For example
conda create -n myenv --prefix /path-to-envs source activate /path-to-envs/myenv
As mentioned previously, conda environments are grouped into locations or paths. The list of paths that are searched for environments available to you is in the bash environment variable CONDA_ENV_PATH. It can also be set in a condarc file as follows:
envs_dirs:
- /data/lab/mylab/conda/envs # appends to existing search path
env_prompt: ({name})
So instead of always providing an absolute path in your source activate commands, you can set up a condarc file as shown above,
for example in:
/data/lab/mylab/conda/startup/condarc
and then have it invoked automatically to set the environment paths for your lab by editing your bashrc (or a lab modulefile):
export CONDARC=/data/lab/mylab/conda/startup/condarc
Then, to invoke one of your lab’s environments, you can simply do:
source activate my-shared-env
Installing Packages Locally using Conda
If you need to install Python packages that are not otherwise available in Kamiak’s installation, there are several ways to do this.
The recommended technique is to just use
conda install somePackage
If the package is not available in the Anaconda.org repository, you can specify another “channel” to search from, which are the locations where packages are stored:
conda install -n myenv -c someChannel somePackage
where someChannel is the identifier of the repository.
A second technique is to use pip from within Anaconda. Pip is another package manager that is fully integrated into Conda, and can be transparently used from within Conda environments. Pip is often used to install packages from respositories such as PyPI. The preferred sequence of commands to install a package using pip are as follows:
module load anaconda3 conda create -n myenv source activate myenv conda install pip pip install somePackage
The above is the technique described in the conda documentation.
It is key to first install pip into your environment, since pip by default will try to install into wherever it is located, i.e., system directories, which you do not have permissions to modify.
A third technique, and not recommended, is to directly use pip from within standalone Python.
For example:
module load python3 pip install --user somePackage
The package will be installed into your home directory at ~/.local/lib/python3.7/site-packages, with any binaries in ~/.local/bin. After installation, you can run python3 and import the package. Note that the --user
flag directs python to install the package off your home directory. If you would like your packages to be installed to a different directory use the --prefix
flag. For example, to install packages into a central location, use the --prefix
option combined with the PYTHONPATH
variable.
pip3 install --prefix=~/myPython somePackage export PYTHONPATH=~/myPython/lib/python3.7/site-packages:$PYTHONPATH
It is not recommended to use the above technique of pip within standalone Python, since this puts the package into a global environment in ~/.local that is searched by Python, outside the scope of managed environments. The better way to install is to use conda install pip
, then install using pip. The package will then go into a specific conda environment rather than ~/.local.
See conda documentation for further information on installing packages in conda.
Installing from Source
To install a package from source, just follow the above directions, and instead of using a package name use the path to the somePackage.gzip or somePackage.tar.gz file.
For example, after activating your Conda environment and installing pip into it, type:
pip install /path/somePackage.tar.gz
Pip will automatically perform necessary extractions and run python with the setup.py file to complete the installation.